2017-06-23 31 views
-1

Webアプリケーションのコントローラクラスを作成中にタイプミスをしました。このURLは次のようになります。/ ブログ/postname そして、私はこのように見えたかった:/ ブログ/postnameより良い/ ブログ/postname。URLルート名を変更します。ASP.NET MVC

私はGlobal.asax.csRegisterRoutesを試してみました:

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

    routes.MapRoute(
     "BlogPage", 
     "blog/{action}/{id}", 
     new { controller = "Blogs", action = "Index", id = "" } 
    ); 

    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { controller = "Blogs", action = "Index", id = "" } 
    ); 
} 

protected void Application_Start() 
{ 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
} 
しかし、私は localhost:######/blogに移動しようとすると404エラーが表示されます。 もう一度やり直さなくてもこれを修正する方法はありますか?

+0

コントローラーの名前を変更することができます。 Visual Studioに名前の変更/リファクタリングが組み込まれています。 – maccettura

+1

自分のルートを正しく覚えていれば、それらのルートの両方にidパラメータが必要です。私はあなたのURLに '\ controller'だけを使用できるようにするには' id = UrlParameter.Optional'を設定する必要があると思います – Dave

+0

@maccetturaこれをどうやって説明してください。これがURLの経路を変更するかどうか教えてください。 – gunslinger

答えて

1
私はそのコントローラ名は下記の投稿のコードに見られるように Blogsで見るあなたの投稿のルートからまあ

いますが、blogとしてそれにアクセスしようとしているが、それは(リソースが見つかりません)404を投げるべきではないのですか?

routes.MapRoute(
    "BlogPage", 
    "blog/{action}/{id}", 
    new { controller = "Blogs", action = "Index", id = "" } 
); 
+0

はい、まさに@Daveと同じように、ルートは同じです。私は/ Blogs with/blogを置き換えたいからです。 – gunslinger

0

/blog/postnameを実行しようとしている場合は、URLに{action}は必要ありません。

routes.MapRoute(
    "BlogPage", 
    "blog/{postname}", 
    new { controller = "Blogs", action = "Index", postname = UrlParameter.Optional } 
); 

あなたのindexアクションは、次のようなものになります。

public ActionResult Index(string postname = "") 
{ 
    if(postname == "") 
    { 
     // show list of posts or some other content 
    } else { 
     // find content from postname and show that 
    } 
} 
0

を私はとても単純なものだったと信じてすることはできません(私も少し恥ずかしい私を見つけるために私にそんなに時間がかかったこと間違っていた)、私はついにやりました!

私はGlobal.asax.csにコードを追加していました - 私の質問とこのthis tutorialに記載されています。

しかし正しい方法、または少なくとも働いた方法は、RouteConfig.csファイルに全く同じコードを追加していました。

したがって、答えはファイルに私の質問で全く同じコードを追加し、Global.asax.csではなくです。

関連する問題