2014-11-05 116 views
0

我在註冊路線中添加了新路線。添加新路線時出現異常

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
routes.IgnoreRoute("{resource}.wdgt/{*pathInfo}"); 
routes.IgnoreRoute("ChartImg.axd/{*pathInfo}"); 
routes.Ignore("{*pathInfo}", new { pathInfo = @"^.*(ChartImg.axd)$" }); 
routes.IgnoreRoute("{resource}.svc"); 

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

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

現在我試圖訪問下面的URL,我得到以下異常。 本地主機:53643 /帳戶/ LogOn支持

例外: System.Web.HttpException(0X80004005):控制器用於路徑 '/帳戶/ LogOn支持' 未找到或沒有實現一個IController。 在System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(的RequestContext的RequestContext,類型controllerType) 在System.Web.Mvc.DefaultControllerFactory.CreateController(的RequestContext的RequestContext,字符串controllerName) 在System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase HttpContext的,一個IController &控制器,IControllerFactory &工廠) 在System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase HttpContext的,AsyncCallback的回調,對象狀態) 在System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext的HttpContext的,AsyncCallback的回調,對象狀態) at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context,AsyncCallback cb,Object extraData) 在System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在System.Web.HttpApplication.ExecuteStep(IExecutionStep一步,布爾& completedSynchronously)}

請幫我解決這個問題。

在此先感謝。

回答

0

問題是,你已經聲明瞭兩條路徑,兩者都匹配,因此.NET路由將無法區分它們之間的區別。當您導航到/Account/Logon時,它會將DefaultWithTenantCode路線而不是Default路線與以下路線值進行匹配。

tenantCode = "Account" 
controller = "LogOn" 
action = "Index" 
id = "" 

一種擺脫這種情況的方法 - 在路由中添加某種標識符,以便知道何時傳遞租戶代碼。

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

匹配DefaultWithTenantCode路線時,該會希望像/tenant-code-21/Tenant/Index/的URL。如果它不是以租戶代碼開始,它將使用Default路由。

另一種選擇是在傳遞租戶代碼時製作所有需要的參數。

routes.MapRoute(
    name: "DefaultWithTenantCode", 
    url: "{tenantcode}/{controller}/{action}/{id}" 
     ); 

這將意味着它永遠不會匹配DefaultWithTenantCode路線,除非所有4個參數被明確地傳遞。

相關問題