【发布时间】:2017-02-14 07:23:13
【问题描述】:
简介:
我开发多语言网络应用程序。管理员可以创建新语言(此信息存储在数据库中)。因此,语言不会在代码中的某处硬编码。用户的首选语言存储在浏览器 cookie 中。
现在我想从这里配置 url 路由:
www.host.com/home/about
到这里:
www.host.com/{lang}/home/about
RouteConfig.cs 看起来像:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.LowercaseUrls = true;
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
foreach (Route r in routes)
{
r.Url = "{lang}/" + r.Url;
if (r.Defaults == null)
r.Defaults = new RouteValueDictionary();
r.Defaults.Add("lang", ServiceLocalization.GetLanguageFromBrowserCookie());
}
}
}
参数 {lang} 被添加到每个请求 url。我需要从 cookie 中设置默认值。服务方法GetLanguageFromBrowserCookie()使用HttpContext.Current.Request.Cookies对象访问客户端发送的cookies。
但是HttpContext.Current.Request 对象在请求处理管道的这个阶段是不可访问的。我得到这个错误:“请求在这个上下文中不可用”
有没有办法获取带有 cookie 值的 MapRoute 参数?
【问题讨论】:
标签: asp.net-mvc cookies asp.net-mvc-routing