加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 添加ELMAH并更改elmah.mvc.route后,旧路由仍然可

发布时间:2020-12-15 22:30:06 所属栏目:asp.Net 来源:网络整理
导读:我已经将ELMAH添加到我的ASP.NET MVC 4 .Net 4 Web应用程序中. 整合很简单,效果很好. 我已将web.config的应用程序设置中的“elmah.mvc.route”值更改为“Admin / SiteLog”路由 – 此时此路径上显示elmah日志 但是,由于某些原因,它仍然显示在“/ elmah”(没
我已经将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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读