2017-08-28 25 views
0

我正在MVC 5中工作,並接管了一個項目。當我登錄到網頁「mydomain.com」是一個錯誤出現:「服務器錯誤‘/’應用程序的資源無法找到說明:HTTP 404請求的URL:/」MVC主頁不工作,RouteConfig和全局文件看起來OK

如果我輸入mydomain.com/home/index,它應該出現在主頁上。我認爲這是一個RouteConfig.cs問題,但對我來說,一切看起來都很漂亮。

namespace Source 
{ 
    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: "Glossary2", 
       url: "{controller}/{action}/{letter}", 
       defaults: new { controller = "Teacher", action = "Glossary2", letter = UrlParameter.Optional } 
       ); 

      /* Will need to finish this later. 
      * When the contact us form is submitted, it should redirect to Home/Contact/{state} 
      * where {state} can be either 'Success' or 'Error', which will display 
      * an alert component in the view based on the provided {state}. 
      */ 
      routes.MapRoute(
       name: "ContactSuccess", 
       url: "{controller}/{action}/{submissionStatus}", 
       defaults: new { controller = "Home", action = "Contact", submissionStatus = UrlParameter.Optional } 
       ); 

      /* Will need to finish this later. 
      * When the contact us form is displayed, it should check to see if a reason for contacting 
      * us is already set. If it is, it should automatically select the appropriate reason on the 
      * dropdown menu. 
      */ 
      routes.MapRoute(
       name: "ContactReason", 
       url: "{controller}/{action}/{reason}", 
       defaults: new { controller = "Home", action = "Contact", reason = UrlParameter.Optional } 
       ); 
     } 
    } 
} 

我不確定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(); 
     } 
    } 
} 

有沒有辦法找出域名未被路由到home/index的原因?如果我將Default映射放置在RouteConfig文件的底部,它將自動指向登錄頁面。再次,我並不真正理解爲什麼這樣做會這樣。

+1

所有這些路線相互衝突。這些都有相同的路由模板。您需要區分這些路線更多 – Nkosi

回答

0

我認爲您的路線定義不正確,路線順序從上到下評估(the most specific path resolved first)。

因此,默認路由應當發生作爲最後定義的路線:

​​3210

此外,在樣品中的每一個路徑中定義的所有URL是在相同的模式(使用{controller}/{action}/{parameter}),因此它有可能衝突彼此之間。你可以使用普通字符串來區分相似的路由模式:

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

注意:使用RouteDebugger找出訪問特定的路由時,通過RouteConfig處理的路由。

+0

我現在註釋了所有其他路線,並且按計劃運行。現在試圖找出爲什麼添加其他路線。謝謝。 – Zach