ASP中的动态路由操作名称.净MVC
本文关键字:MVC 操作 路由 动态 ASP | 更新日期: 2023-09-27 18:04:25
我想创建一个到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
文件的内容和@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 }
);
}
}
你在问题中提到的东西被称为鼻涕虫。
我在这里回答了一个关于web api的类似问题
Web api -如何使用鼻涕虫路由?
如果在路由配置的末尾加上这个符号,那么路由配置将是这样的
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"
因为段塞是可选的,所以上面的URL仍然会匹配到
"Item/31223512"