C# ASP.NET MVC中的动态路由操作名称
我想创建一个指向URL的动态路由,如下所示:C# ASP.NET MVC中的动态路由操作名称,c#,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-routing,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc Routing,我想创建一个指向URL的动态路由,如下所示: http://localhost:51577/Item/AnyActionName/Id 请注意,控制器名称是静态的,不需要是动态的。另一方面,我需要让action name部分是动态的,这样无论在URL的这一部分中写了什么,我都会将用户重定向到项控制器内的索引操作 到目前为止,我尝试的是: public static void RegisterRoutes(RouteCollection routes) { routes.MapRoute
http://localhost:51577/Item/AnyActionName/Id
请注意,控制器名称是静态的,不需要是动态的。另一方面,我需要让action name部分是动态的,这样无论在URL的这一部分中写了什么,我都会将用户重定向到项
控制器内的索引
操作
到目前为止,我尝试的是:
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 }
);
}
}
你在问题中所指的被称为鼻涕虫 我在这里为WebAPI回答了一个类似的问题 当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=3123512
slug=“任何项目名称”
"Item/31223512"
所以,即使有人请求
item/create
,它也应该转到索引操作?是的,但它永远不会是item/create,而是一个项目的名称:)那么你是说{action}url的一部分是项目的名称吗?你有参数吗?您可以共享索引操作方法签名和您尝试访问的url吗?是的,我可以共享,项目的ID是我将用于检索项目数据的参数,动态操作名称只是为了使其更人性化:)您可以共享您尝试的url以及您希望它映射到的url吗?