【问题标题】:route config not working路由配置不起作用
【发布时间】:2017-12-20 21:18:43
【问题描述】:

我是 asp.net mvc 的新手,并且遇到了路由问题。 我正在尝试修改以下网址 -

localhost:2124/Teum/ClosedEvents

进入

localhost:2124/Teum/history

通过使用路由作为

routes.MapRoute(
    name: "history",
    url: "{controller}/{action}",
    defaults: new { controller = "Teum", action = "ClosedEvents", id = UrlParameter.Optional }
);

我在这里看到了一个带有 Web.config 的解决方案并添加到它

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="UrlRoutingModule"/>
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>
    <handlers>
      <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral,  PublicKeyToken=b03f5f7f11d50a3a"/>
    </handlers>
  </system.webServer>

但它仍然不起作用,无论哪种方式我都会收到 404 错误。

将不胜感激任何形式的帮助。

【问题讨论】:

  • actionResult 是 ClosedEvents 但我希望它在 url 中显示为历史记录

标签: c# asp.net-mvc asp.net-mvc-4 url-routing asp.net-mvc-routing


【解决方案1】:

要将ClosedEvents 操作“重命名”为history,您需要使{action} URL 段文字。

routes.MapRoute(
    name: "history",
    url: "Teum/History",
    defaults: new { controller = "Teum", action = "ClosedEvents" }
);

您不一定需要将{controller} 设置为参数,但如果您的目标是在多个不同的控制器上重命名此操作,这可能会有所帮助。您也可能不需要可选的 {id} 参数,但如果您需要,可以这样添加。

routes.MapRoute(
    name: "history",
    url: "Teum/History/{id}",
    defaults: new { controller = "Teum", action = "ClosedEvents", id = UrlParameter.Optional }
);

如果你想让“history”小写,你应该使用

routes.LowercaseUrls = true;

在您的 RouteConfig.RegisterRoutes() 方法的顶部。否则,在路由配置中区分大小写无关紧要。

【讨论】:

    【解决方案2】:

    你的胭脂应该是这样的:

    首先你必须添加 IgnoreRoute:

    public static void RegisterRoutes(RouteCollection routes) 
    { 
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
    
        routes.MapRoute("history", "{controller}/{action}/{id}",
                         new { controller = "Teum", action = "ClosedEvents", id = UrlParameter.Optional }
                    );
     }
    

    还有你的 Global.asax 文件:

    protected void Application_Start() 
    { 
    
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
    

    如果你的控制器动作中有多个参数,那么路由应该是:

    //Action With Parameter 
    public ActionResult ClosedEvents(string searchBy, string search, int page = 1, int pageSize = 20, bool falsPositive = false) 
    { 
    }
    
    
    //And your routing should be :
    routes.MapRoute( 
    "history", // Route name 
    "{controller}/{action}/{searchBy}/{search}/{page}/{pageSize}/{falsPositive}", // URL with parameters 
    new { controller = "Teum", action = "ClosedEvents", searchBy = "", search = "",page="",pageSize="",falsPositive="" } // Parameter defaults 
    );
    

    干杯!!

    【讨论】:

    • 我不希望它成为默认页面,只是想在显示上重命名它而不是动作名称,我知道这是可能的但不知道如何应用它。
    • 将默认名称更改为“历史”
    • 我做到了,再看问题
    • 没关系,因为没有 id 传递到操作中
    • 你有这个: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}");在您的 routhconfig 文件中检查更新的 ans
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2017-04-14
    • 2016-12-29
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多