我已经将ELMAH添加到我的ASP.NET MVC 4 .Net 4 Web应用程序中.
整合很简单,效果很好.
我已将web.config的应用程序设置中的“elmah.mvc.route”值更改为“Admin / SiteLog”路由 – 此时此路径上显示elmah日志
但是,由于某些原因,它仍然显示在“/ elmah”(没有css样式,但内容相同).
如何禁用默认的elmah路由?
使用Elmah.MVC nuget包进行集成
解决方法
发生这种情况是因为默认路由(假设您有一个)仍将与Elmah.Mvc.ElmahController匹配.
routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}",// URL with parameters new { controller = "Home",action = "Index",id = UrlParameter.Optional });
无论您是否想要,路线的“{controller}”部分都会找到匹配的控制器.在这种情况下,这显然是有问题的.
您可以使用IRouteConstraint(概述为here)在路由上添加约束.NotEqual约束实际上非常有用.
using System; using System.Web; using System.Web.Routing; public class NotEqual : IRouteConstraint { private string _match = String.Empty; public NotEqual(string match) { _match = match; } public bool Match(HttpContextBase httpContext,Route route,string parameterName,RouteValueDictionary values,RouteDirection routeDirection) { return String.Compare(values[parameterName].ToString(),_match,true) != 0; } }
因此,使用以下内容将ElmahController从默认路由中排除.
routes.MapRoute( "Default",id = UrlParameter.Optional },new { controller = new NotEqual("Elmah") });
这将使“/ elmah”的请求返回404.