Asp.net 添加区域后的路由问题
我曾经建立过一个多语言网站 我做了一些改变,为了一些SEO目的,在URL中添加了文化 现在我有一个如下所示的BaseController,每个控制器都是从这个控制器中派生出来的Asp.net 添加区域后的路由问题,asp.net,asp.net-mvc,asp.net-mvc-routing,Asp.net,Asp.net Mvc,Asp.net Mvc Routing,我曾经建立过一个多语言网站 我做了一些改变,为了一些SEO目的,在URL中添加了文化 现在我有一个如下所示的BaseController,每个控制器都是从这个控制器中派生出来的 public class BaseController : Controller { protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state) { string cultur
public class BaseController : Controller
{
protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
{
string cultureName = RouteData.Values["culture"] as string;
if (string.IsNullOrEmpty(cultureName))
{
HttpCookie cultureCookie = Request.Cookies["_culture_"];
if (cultureCookie != null)
cultureName = cultureCookie.Value;
else
cultureName = CultureHelper.GetDefaultCulture();
}
cultureName = CultureHelper.GetImplementedCulture(cultureName);
if (RouteData.Values["culture"] as string != cultureName)
{
RouteData.Values["culture"] = cultureName.ToLowerInvariant();
Response.RedirectToRoute(RouteData.Values);
}
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
return base.BeginExecuteCore(callback, state);
}
}
这是路由配置:
routes.MapRoute(
name: "WithCulture",
url: "{culture}/{controller}/{action}/{id}",
defaults: new { culture = String.Empty, controller = "Home", action = "Index", id = UrlParameter.Optional },
constraints: new { culture = "[a-z]{2}" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { culture = String.Empty, controller = "Home", action = "Index", id = UrlParameter.Optional }
);
它(似乎)运转良好。我的意思是我从以下链接重定向:
/
/Home
为此:
/fr
/fr/Home
但当我添加一个区域(例如管理器)时。
在这一点上,我得到一些URL的错误。例如:
/
/Home/
已重定向到此URL
/Manager/Home?culture=en
我错过了什么?您是否尝试将
namaspaces
参数添加到maprote
方法中?例如,namespaces:new[]{“someNamespace.Controllers”}
我添加了namespaces参数,但存在相同的问题。您是否也在…AreaRegistration
中添加了它?是的<代码>名称空间:新建[]{“something.Areas.Manager.Controllers”}您是否尝试将namaspaces
参数添加到MapRoute
方法中?例如,namespaces:new[]{“someNamespace.Controllers”}
我添加了namespaces参数,但存在相同的问题。您是否也在…AreaRegistration
中添加了它?是的<代码>名称空间:新建[]{“something.Areas.Manager.Controllers”}