【发布时间】:2017-01-04 05:55:26
【问题描述】:
我想创建一个到如下 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 }
);
}
}
【问题讨论】:
-
所以即使有人请求
item/create,它也应该进入索引操作? -
是的,但它永远不会是项目/创建,它将是项目的名称:)
-
那么你是说 url 的 {action} 部分是项目的名称吗?你有参数吗?你能分享 Index 操作方法签名和你试图访问的 url 吗?
-
是的,我可以分享,项目的 ID 是我将用于检索项目数据的参数,动态操作名称只是为了使其更人性化: )
-
你能分享你正在尝试的 url 以及你希望它如何映射到吗?
标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing