0

我是新的与asp.net mvc和路由问题。 我试图修改以下网址 - 通过使用路由作为路由配置不工作

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

我在这里看到一个解决方案与Web.config中

localhost:2124/Teum/ClosedEvents 

localhost:2124/Teum/history 

,并添加到它

<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错误。

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

+0

actionResult是ClosedEvents,但我希望它显示在URL作为历史 –

回答

0

你抹红应该是这样的:

首先,你必须添加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); 
} 

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

//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 
); 

干杯!

+0

我不希望它成为默认页面,只想要重命名它在显示,但不是在行动的名称,我明白这是可能的但不知道如何应用它。 –

+0

更改默认名称为“历史” –

+0

我做到了,再来看看关于这个问题 –

2

要将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 } 
); 

如果你想 “历史” 是小写的,你应该在你的RouteConfig.RegisterRoutes()方法的顶部使用

routes.LowercaseUrls = true; 

。否则,在路由配置中区分大小写并不重要。