Asp.net-Mvc

添加 ELMAH 並更改 elmah.mvc.route 後,舊路由仍然可用

  • May 10, 2014

我已將 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="*" />

引用自:https://stackoverflow.com/questions/14876935