【问题标题】:How to remove controller name from URL in MVC project如何从 MVC 项目中的 URL 中删除控制器名称
【发布时间】:2020-01-07 23:45:00
【问题描述】:

我有一个如下所示的 URL,我需要删除控制器名称 (myController)。我已经使用了几个修复程序,但没有一个解决了这个问题。请大家帮帮我..

http://foldername.example.com/foldername/myController/my-page

'example.com' 是域,所有与站点相关的文件都在'foldername' 文件夹中。 'my-page' 是视图名称

最后我需要上面的 URL 如下所示。

http://example.com/my-page

提前谢谢各位..!!

【问题讨论】:

标签: .net asp.net-mvc url redirect controller


【解决方案1】:

你应该在 global.asax 中映射新路由(在默认路由之前添加),例如:

routes.MapRoute("SpecificRoute", "{action}/{id}", new {controller = "MyController", action = "Index", id = UrlParameter.Optional});

routes.MapRoute("Default", "{controller}/{action}/{id}", new {controller = "Home", action = "Index", id = UrlParameter.Optional} );

【讨论】:

    【解决方案2】:

    您可以尝试通过首先放置更专业的路由来反转路由定义。此外,您可能不想将动作名称硬编码为动作,而是使用 {action} 占位符:

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            //routes.MapMvcAttributeRoutes();
    
        routes.MapRoute(
            name: "Special",
            url: "{action}",
            defaults: new { controller = "Home", action = "LandingIndex" }
        );
    
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
       }
    }
    

    点击以下链接:

    Link 1

    Link 2

    Link 3

    【讨论】:

      【解决方案3】:

      global.asax中使用路由

      routes.MapRoute("MyAction", "{action}/{id}", new {controller = "MyController", action = "Index", id = UrlParameter.Optional});
      

      在控制器中

      [Route("MyAction")]
      public ActionResult MyAction()
      {
       ...
       }
      

      将关注添加到RouteConfig.cs

      routes.MapMvcAttributeRoutes();
      

      【讨论】:

        【解决方案4】:

        通过在 RouteConfig.cs 文件中的 route.MapRoute 之前添加以下行来启用属性路由

        routes.MapMvcAttributeRoutes();
        

        然后将Route Attribute添加到每个带有路由名称的动作中,例如:

        [Route("MyAction")]
        public ActionResult MyAction()
        {
        ...
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-24
          • 1970-01-01
          • 2013-08-15
          • 1970-01-01
          • 2015-06-17
          • 1970-01-01
          • 2018-04-11
          相关资源
          最近更新 更多