【问题标题】:Elmah getting stuck in default route?Elmah 卡在默认路线上?
【发布时间】:2015-01-23 10:54:20
【问题描述】:

我将 Elmah.MVC 添加到我的 MVC 站点,但是当访问 /elmah 时,我的站点陷入重定向循环 /elmah?culture=en - 我认为这是因为我的一个路由配置条目:

公共类 RouteConfig { 公共静态无效注册路由(RouteCollection 路由) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 路线.MapRoute( “默认”, "{culture}/{controller}/{action}/{id}", 新{文化= CultureHelper.GetDefaultCulture(),控制器=“家”,动作=“SetCulture”,id = UrlParameter.Optional} ); } }

我应该如何修改 RouteConfig 以使 /elmah 正确显示?还是我看错地方了?

谢谢:-)

【问题讨论】:

    标签: asp.net-mvc elmah elmah.mvc


    【解决方案1】:

    这是由一个名为 CultureAwareControllerActivator 的类引起的,该类实现了 IControllerActivator

    我的知识有限,但是貌似这个类(我自己加的)在控制器激活时连接到请求,决定是否修改和重定向。

    公共类 CultureAwareControllerActivator : IControllerActivator { 公共 IController 创建(RequestContext requestContext,类型控制器类型) { 字符串cultureName = requestContext.RouteData.Values["culture"] 作为字符串; // 尝试从 Request 中读取文化 cookie if (cultureName == null) cultureName = requestContext.HttpContext.Request.UserLanguages != null && requestContext.HttpContext.Request.UserLanguages.Length > 0 ? requestContext.HttpContext.Request.UserLanguages[0] : 空值; // 从 HTTP 头 AcceptLanguages 获取 // 验证文化名称 CultureName = CultureHelper.GetImplementedCulture(cultureName); // 这是安全的 if (requestContext.RouteData.Values["culture"] as string !=cultureName && (string) requestContext.RouteData.Values["controller"] != "Elmah") { // 在 URL 中强制使用有效的文化 requestContext.RouteData.Values["culture"] =cultureName.ToLowerInvariant(); // 也小写 // 重定向用户 requestContext.HttpContext.Response.RedirectToRoute(requestContext.RouteData.Values); } // 修改当前线程的文化 Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName); Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; 返回 DependencyResolver.Current.GetService(controllerType) 作为 IController; } }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-03
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多