gpt4 book ai didi

asp.net-mvc - 为什么我在 ASP.NET MVC 中使用 ELMAH 得到重复的异常条目?

转载 作者:行者123 更新时间:2023-12-02 05:14:14 25 4
gpt4 key购买 nike

我是 ELMAH 的新手,但我已经使用 MVC 一段时间了。在阅读了有关该主题的几篇博客之后,我正在追求拥有一个处理 404 和未知错误页面的 ErrorController 的道路,并制定一个默认路由,将所有未知路径转发到该 Controller 上的 404 操作.

问题是ELMAH 记录每个错误两次;除了在标题括号中指定的标识号之外,详细日志完全相同。

还有其他人遇到过这个吗?除了必须放弃默认的 {controller}/{action}/{id} 路由之外,路由似乎工作得很好。

这是我的配置:

    <configSections>
...
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>
...
</configSections>
<system.web>
...
<customErrors mode="On" defaultRedirect="~/error/unknown/">
<error statusCode="404" redirect="~/error/notfound/"/>
</customErrors>
...
<httpHandlers>
...
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
...
</httpHandlers>
...
<httpModules>
...
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
</httpModules>
</system.web>
<system.webserver>
<modules runAllManagedModulesForAllRequests="true">
...
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
</modules>
<handlers>
...
<add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</handlers>
</system.webserver>
<elmah>
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/errorlogpath" />
</elmah>

和路由代码:

    routes.MapRoute(
"ErrorDefault",
"error/{action}",
new { controller = "error", action = "unknown", id = "" }
);

routes.MapRoute(
"Default",
"{*url}",
new { controller = "error", action = "notfound", id = "" }
);

编辑:这也是 ErrorController,仅用于我的测试目的:

/// <summary>
/// Handles error page routing
/// </summary>
public class ErrorController : Controller
{
/// <summary>
/// Action for unknown errors
/// </summary>
/// <returns></returns>
[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Unknown()
{
Response.StatusCode = (int)HttpStatusCode.InternalServerError;
return View();
}

/// <summary>
/// Action for 404s
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
[AcceptVerbs(HttpVerbs.Get)]
public ViewResult NotFound(string path)
{
Response.StatusCode = (int)HttpStatusCode.NotFound;
return View();
}
}

最佳答案

为什么要放弃默认路由?
我看到您正在定义一个 ErrorDefault 路由和一个 catchAll 路由,这对我来说似乎是多余的。您希望 catchAll 路由能够处理任何未知路由,因此您希望在其中定义错误。

你可以尝试这样的事情:

// All other pages use the default route.
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Applications", action = "Index", id = "" }
);

// Show a 404 error page for anything else.
routes.MapRoute("Error", "{*url}",
new { controller = "Error", action = "notfound" }
);

是否冗余路由是错误日志中重复条目的原因?

关于asp.net-mvc - 为什么我在 ASP.NET MVC 中使用 ELMAH 得到重复的异常条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2335331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com