我想创建到URL的动态路由,如下所示:
http://localhost:51577/Item/AnyActionName/Id
请注意,控制器名称是静态的,不需要动态。另一方面,我需要使动作名称部分具有动态性,以便无论在URL的那部分中写入什么内容,我都将用户重定向到控制器Index
内部的动作Item
。
到目前为止,我尝试过的是:
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回答了类似的问题
尾巴塞满之后,路由配置将如下所示
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) {
//...
}
}
示例网址...
"Item/31223512/Any-Item-Name"
然后将参数匹配如下...
id = 31223512
slug = "Any-Item-Name"
并且由于该段是可选的,因此上述URL仍将与
"Item/31223512"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句