我想通过创建自定义 IRequestCultureProvider
来管理我的应用的本地化,如下所示:
public class MyCustomRequestCultureProvider : IRequestCultureProvider
{
public Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
{
var language= httpContext.GetRouteValue("language");
var result = new ProviderCultureResult(language, language);
return Task.FromResult(result);
}
}
我的 MyCustomRequestCultureProvider
在每个请求都被点击,这没关系 . 我的问题是在MVC管道中,我的提供程序的 DetermineProviderCultureResult
方法在路由进程之前被命中,因此 httpContext.GetRouteValue("language")
总是返回null .
在以前版本的MVC中,我有可能通过这样做来通过路由过程手动处理我的url
var wrapper = new HttpContextWrapper(HttpContext.Current);
var routeData = RouteTable.Routes.GetRouteData(wrapper);
var language = routeData.GetValue("language")
我现在找不到在新的framewrok中做同样事情的方法 . 此外,我想使用路由数据找出我的langugae,用一些字符串函数分析我的url字符串,以找到语言不是一个选项 .
2 回答
尚未决定实施此功能 .
IRoutingFeature
仅在MVC完成请求后可用 .我能够整理出一个适合你的解决方案 . 这将设置您传入
UseMvc()
的路线以及所有属性路由以填充IRoutingFeature . 完成后,您可以通过httpContext.GetRouteValue("language");
访问该类 .Startup.cs
将路由移动到委托(用于可重用),相同的文件/类:
Add new middleware:
您可能还必须定义此类...
根据Ashley Lee的回答,这是一种防止重复路由配置的优化方法 .
这取决于必须添加到StartUp类的以下两个方法: