2016-08-27 12 views
1

動的ルーティングアクション名

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 }); 
} 

そして、私は私のアプリをビルドするとき、私は次のエラーを取得::私がこれまで試してみました何

がある

The resource cannot be found.

編集

ここ

は私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); 
    } 
} 

そして、ここで@Nkosiが提供した答えとRouteConfig.csファイルの内容です:

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 } 
     ); 
    } 
} 
+0

誰かが 'item/create'をリクエストしたとしても、それはIndexアクションに行くべきですか? – Shyju

+0

ええ、それは決してアイテム/作成するつもりはないです、それはアイテムの名前になるでしょう:) – User987

+0

あなたは{アクション}のURLの一部がアイテムの名前だと言いますか?パラメータがありますか?インデックスアクションメソッドのシグネチャとアクセスしようとしているURLを共有できますか? – Shyju

答えて

2

をあなたは、あなたの質問にを参照していることはスラグと呼ばれているが。

は、私は、ルートの設定は、例えば、コントローラのアクションに一致する可能性があり、この

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 } 
    ); 

} 

のようになります。最後にスラグを使用してWeb API

Web api - how to route using slugs?

のためにここに同様の質問に答えました。 ..

public class ItemController : Controller { 
    public ActionResult Index(int id, string slug = null) { 
     //... 
    } 
} 

exampl電子のURL ... id = 31223512

  • slug = "Any-Item-Name"
  • そして

    "Item/31223512/Any-Item-Name" 
    

    次のように...マッチしたパラメータを持っているでしょう

    • スラグはオプションであるため、上記のURLそれでも一致するでしょう

      "Item/31223512"