Мы получаем ошибку 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);
}
}
}