2017-08-28 3 views
0

私はMVC 5で作業しており、プロジェクトを引き継いでいます。私はホームページにログインすると、「mydomain.com」は、エラーを思い付く:MVCホームページが動作しない、RouteConfigとグローバルファイルが見える

「『/』アプリケーションでサーバーエラーが発生しましたリソースは見つかりませんでした説明:HTTP 404要求されたURL:/」

mydomain.com/home/indexに入力すると、ホームページが表示されます。私はこれがRouteConfig.csの問題だと思っていますが、すべてが私にとってかなりデフォルトに見えます。

私はCustomeViewEngineが何をしているのかよく分かりません。私はGlobal.asax.csファイルも調べましたが、それもかなり標準的です。

namespace Source 
{ 
    public class MvcApplication : System.Web.HttpApplication 
    { 
     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
      ViewEngines.Engines.Add(new CustomViewEngine()); 
     } 
    } 
    public class CustomViewEngine : RazorViewEngine 
    { 
     public static readonly string[] CUSTOM_PARTIAL_VIEW_FORMATS = new[] 
      { "~/Views/Selection/{0}.cshtml" }; 
     public CustomViewEngine() 
     { 
      base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(CUSTOM_PARTIAL_VIEW_FORMATS).ToArray(); 
     } 
    } 
} 

ドメイン名がホーム/インデックスにルーティングされない理由をトレースする方法はありますか?私がRouteConfigファイルの一番下にDefaultマッピングを置くと、自動的にログインページに向かわせたいと思っています。再び、私はこれがなぜこのように作用するのかを本当に理解していません。

+1

これらのルートはすべて互いに競合しています。それらはすべて同じ経路テンプレートを持っています。あなたはそれらのルートをより区別する必要があります – Nkosi

答えて

0

あなたのルート定義は正しい順序ではなく、ルート順は上から下に評価されます(the most specific path resolved first)。

したがって、デフォルトルートが最後に定義された経路として行われるべきである。

​​3210

はまた、試料中のすべての経路で定義されたすべてのURLが({controller}/{action}/{parameter}を使用して)同じパターンであり、従ってそれは、潜在的にコンフリクトお互いの間に。特定のルートにアクセスする際RouteConfigによって処理されたルートを見つけるために使用RouteDebugger

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

    routes.MapRoute(
     name: "Glossary2", 
     url: "Teacher/{action}/{letter}", 
     defaults: new { controller = "Teacher", action = "Glossary2", letter = UrlParameter.Optional } 
    ); 

    routes.MapRoute(
     name: "ContactSuccess", 
     url: "{controller}/{action}/SubmissionStatus/{submissionStatus}", 
     defaults: new { controller = "Home", action = "Contact", submissionStatus = UrlParameter.Optional } 
    ); 

    routes.MapRoute(
     name: "ContactReason", 
     url: "{controller}/{action}/Reason/{reason}", 
     defaults: new { controller = "Home", action = "Contact", reason = UrlParameter.Optional } 
    ); 

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

注:あなたは、同様のルートパターンを区別するために、プレーン文字列を使用することができます。

+0

私は今、他のすべてのルートをコメントアウトしており、計画どおりに動作しています。ここで、なぜ他のルートが追加されたのかを試してみてください。ありがとうございました。 – Zach

関連する問題