2017-06-28 8 views
1

私はMVC におけるルーティングについての質問をした私はHomeController.csMVC 5ルーティング問題のActionResultルート

と呼ばれるコントローラが私のpublic ActionResult WebPage(int id) idは、私はページのIDで定義された定義されたシンプルなウェブサイトを作成しました

現在:私のルートを表示することのようなものになります

http://localhost:5000/Home/WebPage/1 

私が欲しいものです。

http://localhost:5000/1 

私の現在のRouteConfig.cs

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

誰かが正しい方向に私を指すことができます私はRouteConfig.csに異なる経路でアロットを試してみたが、イム立ち往生?

私はStackOverflowで何かsimilerを検索しましたが見つかりませんでした。

+0

たぶん、 '公共のActionResultウェブページ(int型のID)'として、あなたのアクションを定義し、ルートルート追加: 'routes.MapRoute(名称: "ルート" を、 –

+0

あなたは経路の制約を作成しない限り、経路の値が 'int'である場合を除いて、' '{{id} ''、デフォルト:new {controller =" Home "、action =" WebPage "})その方法を使用します) - ルートを一意に識別するために何かが必要です。 –

+0

ここに私の答えが見つかりました! https://stackoverflow.com/questions/35860959/asp-net-mvc-5-dynamic-controller-routes –

答えて

0

のように答え、私のコントローラで

属性ます

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); 

    **routes.MapMvcAttributeRoutes();** 

routes.MapRoute(
    name: “Default”, 
    url: “{controller}/{action}/{id}”, 
    defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional }); 
} 

使用を助けるかもしれない:[RoutePrefix("")]と私を方法Webページ[Route("{id?}")]

[RoutePrefix("")] 
public class HomeController : Controller 
{ 
    [Route("{id?}")] 
    public ActionResult WebPage(string id) 
    { 
     return View(); 
    } 
} 

RouteConfig.cs

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "WebPage", 
       url: "{id}", 
       defaults: new { controller = "Home", action = "WebPage" } 
      ); 

      routes.MapRoute(
        name: "Default", 
        url: "{action}/{id}", 
        defaults: new { controller = "Home", action = "Index",id = UrlParameter.Optional } 
      ); 
     } 
} 
1

idの値に制約を適用すると、Felipeが提案していることはうまくいくでしょう。

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "WebPage", 
      url: "{id}", 
      defaults: new { controller = "Home", action = "WebPage" }, 
      constraints: new { id = @"\d+" }); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 
+0

idが文字列値の場合はどうなりますか? –

+0

制約が満たされていないため、アプリケーションは次のルートマップと照合しようとします(この場合は「Default」です)。たとえば、 'http:// hostname/x'というURLを指定すると、' Default'マップが実際に一致するため、アプリケーションは 'XController'の' Index'アクションを実行しようとします。 –

1

あなたはルート属性を試してみてください、それがこの

[Route(“{id:int}”)] 
    public ActionResult WebPage(int id) { … }