2013-12-18 2 views
0

Мы получаем ошибку 404 страницы, когда мы запрашиваем этот url на нашем производственном сервере «/ Account/Login», но «/ account/Login» работает нормально. Только случай первой буквы контроллера отличается.MVC 4 Капитализированный контроллер в возврате маршрута 404

Кроме того, у нас нет этой проблемы на нашем сервере разработки.

Проблема появилась только в последние дни, но мы не увидели никаких изменений в наших конфигурациях маршрутов. Поэтому я понятия не имею, что может вызвать эту проблему.

Вот код RouteConfig.cs если вы видите что-то, что могло бы объяснить:

using System; 
using System.Globalization; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Routing; 

namespace MobileWebsite.App_Start 
{ 
    public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      if (routes == null) throw new ArgumentNullException("routes"); 

      const string defautlRouteUrl = "{controller}/{action}/{id}"; 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      RouteValueDictionary defaultRouteValueDictionary = new RouteValueDictionary(
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

      Route defaultRoute = new Route(defautlRouteUrl, defaultRouteValueDictionary, new MvcRouteHandler()); 
      routes.Add("DefaultGlobalisedClientSiteLang", new GlobalisedRouteClientSiteLang(defaultRoute.Url, defaultRoute.Defaults)); 
      routes.Add("DefaultGlobalisedClientSite", new GlobalisedRouteClientSite(defaultRoute.Url, defaultRoute.Defaults)); 
      routes.Add("DefaultGlobalised", new GlobalisedRoute(defaultRoute.Url, defaultRoute.Defaults)); 
      routes.Add("Default", new Route(defautlRouteUrl, defaultRouteValueDictionary, new MvcRouteHandler()));   
     } 
    } 

    public class GlobalisedRoute : Route 
    { 
     public const string CultureKey = "culture"; 
     static string CreateCultureRoute(string unGlobalisedUrl) 
     { 
      return string.Format(CultureInfo.InvariantCulture, "{{" + CultureKey + "}}/{0}", unGlobalisedUrl); 
     } 
     public GlobalisedRoute(string unGlobalisedUrl, RouteValueDictionary defaults) : 
      base(CreateCultureRoute(unGlobalisedUrl), 
       defaults, 
       new RouteValueDictionary(new { culture = new CultureRouteConstraint() }), 
       new GlobalisationRouteHandler()) 
     { 
     } 
    } 
    public class GlobalisedRouteClientSiteLang : Route 
    { 
     public const string CultureKey = "culture"; 
     public const string ClientSiteIdKey = "clientSiteId"; 
     static string CreateClientSiteRoute(string unGlobalisedUrl) 
     { 
      return string.Format(CultureInfo.InvariantCulture, "{{" + ClientSiteIdKey + "}}/{{" + CultureKey + "}}/{0}", unGlobalisedUrl); 
     } 
     public GlobalisedRouteClientSiteLang(string unGlobalisedUrl, RouteValueDictionary defaults) : 
      base(CreateClientSiteRoute(unGlobalisedUrl), 
       defaults, 
       new RouteValueDictionary(new { culture = new CultureRouteConstraint(), clientSiteId = new ClientSiteIdRouteConstraint() }), 
       new GlobalisationRouteHandler()) 
     { 
     } 
    } 

    public class GlobalisedRouteClientSite : Route 
    { 
     public const string ClientSiteIdKey = "clientSiteId"; 
     static string CreateClientSiteRoute(string unGlobalisedUrl) 
     { 
      return string.Format(CultureInfo.InvariantCulture, "{{" + ClientSiteIdKey + "}}/{0}", unGlobalisedUrl); 
     } 
     public GlobalisedRouteClientSite(string unGlobalisedUrl, RouteValueDictionary defaults) : 
      base(CreateClientSiteRoute(unGlobalisedUrl), 
       defaults, 
       new RouteValueDictionary(new { clientSiteId = new ClientSiteIdRouteConstraint() }), 
       new GlobalisationRouteHandler()) 
     { 
     } 
    } 

    public class GlobalisationRouteHandler : MvcRouteHandler 
    { 
     string CultureValue 
     { 
      get 
      { 
       return (string)RouteDataValues[GlobalisedRoute.CultureKey]; 
      } 
     } 

     RouteValueDictionary RouteDataValues 
     { 
      get; 
      set; 
     } 

     protected override IHttpHandler GetHttpHandler(RequestContext requestContext) 
     { 
      if (requestContext == null) throw new ArgumentNullException("requestContext"); 

      RouteDataValues = requestContext.RouteData.Values; 
      CultureManager.SetCulture(CultureValue); 
      return base.GetHttpHandler(requestContext); 
     } 
    } 

    public class CultureRouteConstraint : IRouteConstraint 
    { 
     public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
     { 
      if (values == null) throw new ArgumentNullException("values"); 

      if (!values.ContainsKey(parameterName)) 
       return false; 
      string potentialCultureName = (string)values[parameterName]; 
      return CultureFormatChecker.FormattedAsCulture(potentialCultureName); 
     } 
    } 

    public class ClientSiteIdRouteConstraint : IRouteConstraint 
    { 
     public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
     { 
      if (values == null) throw new ArgumentNullException("values"); 

      if (!values.ContainsKey(parameterName)) 
       return false; 
      string potentialClientSiteId = (string)values[parameterName]; 
      return ClientSiteIdFormatChecker.FormattedAsClientSiteId(potentialClientSiteId); 
     } 
    } 
} 

ответ

Смежные вопросы