ASP.NET MVC中的动态路由操作名称
我想创建一个到以下URL的动态路由:
http://localhost:51577/Item/AnyActionName/Id
请注意,控制器名称是静态的,不需要是动态的。 另一方面,我需要动作名称部分是动态的,这样无论写入URL的那一部分,我都会将用户重定向到Item
控制器内的Index
动作。
到目前为止我尝试的是:
public static void RegisterRoutes(RouteCollection routes) { routes.MapRoute( "Items", "Item/{action}/{id}", new { controller = "Item", action = "Index", id = UrlParameter.Optional }); }
当我构建我的应用程序时,我收到以下错误:
无法找到该资源。
编辑 :
这是我的Global.asax
文件和routeconfig.cs
文件:
public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } }
这是RouteConfig.cs
文件的内容,其中RouteConfig.cs
@Nkosi提供的答案:
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( name: "Items", url: "Item/{id}/{*slug}", defaults: new { controller = "Item", action = "Index", slug = UrlParameter.Optional } ); } }
您在问题中提到的内容称为slug。
我在这里为web api回答了类似的问题
Web api – 如何使用slugs进行路由?
随着slug结尾,路由配置看起来像这样
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Items", url: "Item/{id}/{*slug}", defaults: new { controller = "Item", action = "Index", slug = RouteParameter.Optional } ); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }
这可以匹配示例控制器动作……
public class ItemController : Controller { public ActionResult Index(int id, string slug = null) { //... } }
示例url…
"Item/31223512/Any-Item-Name"
然后将参数匹配如下…
-
id = 31223512
-
slug = "Any-Item-Name"
并且由于slug是可选的,上面的URL仍将匹配
"Item/31223512"
- 如何在编辑该项目并发布后刷新sitecore树节点
- 使用dotnet-mammoth将docx转换为html在部署服务器上失败
- 指数超出范围。 必须是非负数且小于集合的大小
- 将某些页面function或用户界面限制为Asp.Net中经过身份validation的用户
- 客户端自定义数据注释validation
- ASP.NET应用程序的高内存使用率
- ASP.NET MVC重新编译限制达到了15个HostingEnvironment,启动了关闭HostingEnvironment导致关机
- (http)coreclr / dnxCore中的Web请求提供程序?
- SQL Server连接字符串Asynchronous Processing = true