Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC中的动态路由操作名称_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Asp.net Mvc Routing - Fatal编程技术网

C# ASP.NET MVC中的动态路由操作名称

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

我想创建一个指向URL的动态路由,如下所示:

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=“任何项目名称”
因为slug是可选的,所以上面的URL仍然会与

"Item/31223512"

所以,即使有人请求
item/create
,它也应该转到索引操作?是的,但它永远不会是item/create,而是一个项目的名称:)那么你是说{action}url的一部分是项目的名称吗?你有参数吗?您可以共享索引操作方法签名和您尝试访问的url吗?是的,我可以共享,项目的ID是我将用于检索项目数据的参数,动态操作名称只是为了使其更人性化:)您可以共享您尝试的url以及您希望它映射到的url吗?