Asp.net-Mvc
添加 ELMAH 並更改 elmah.mvc.route 後,舊路由仍然可用
我已將 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 在您的路線上添加約束。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", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new { controller = new NotEqual("Elmah") });這將使對“/elmah”的請求返回 404。
我自己剛剛解決了這個問題,最新版本似乎有幾個應用程序設置可以很好地解決這個問題。
<add key="elmah.mvc.IgnoreDefaultRoute" value="true" /> <add key="elmah.mvc.route" value="admin/elmah" />可能還值得了解其他人,因此請查看預設安裝。
<add key="elmah.mvc.disableHandler" value="false" /> <add key="elmah.mvc.disableHandleErrorFilter" value="false" /> <add key="elmah.mvc.requiresAuthentication" value="false" /> <add key="elmah.mvc.allowedRoles" value="*" /> <add key="elmah.mvc.allowedUsers" value="*" />