gpt4 book ai didi

c# - customErrors 与自定义模块

转载 作者:太空狗 更新时间:2023-10-29 19:46:32 27 4
gpt4 key购买 nike

我目前有 httpErrors在此处设置以处理 500:-

<httpErrors errorMode="Custom" existingResponse="Replace">
......
<remove statusCode="500"/>
<error statusCode="500" path="/server-error" responseMode="ExecuteURL"/>
</httpErrors>

这工作正常,但在 iis 收到错误的情况下,我仍然会看到蓝屏死机。一个例子是 Entity Framework 无法连接到数据库并且我收到:-

Cannot open database "Test-DB" requested by the login.
The login failed.
Login failed for user 'sa'.

我已经设置了 customErrors处理这个:-

<customErrors mode="On" defaultRedirect="error.html" redirectMode="ResponseRedirect">
<error statusCode="500" redirect="error.html" />
</customErrors>

只要没有 modules 就可以正常工作没有preCondition="managedHandler" .

我有几个处理图像和 css 文件的模块,它们在同一个项目中。

<modules runAllManagedModulesForAllRequests="false">
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
<add name="ImageHandler" type="foo.bar.ProductImageHandlerHttpModule" />
<add name="CustomCssHandler" type="foo.bar.CustomCssHttpModule" />
<add name="Glimpse" type="Glimpse.AspNet.HttpModule, Glimpse.AspNet" preCondition="integratedMode" />
</modules>

将这些注释掉,我得到 error.html , 把它们放在里面,我得到

Runtime Error
Description: An exception occurred while processing your request. Additionally, another exception occurred while executing the custom error page for the first exception. The request has been terminated.

显示项目中的模块在尝试显示 error.html 时也出错.

有人知道修复/解决方法吗?

最佳答案

这是一个棘手的情况 - 您的错误来自 HttpModule,它针对每个请求运行 - 包括对 error.html 页面的请求。一种方法是仅通过您的服务器路由静态文件(例如 error.html)——并在 .NET 级别忽略它们;这可能并不总是可行的(有时在 .NET 级别处理静态文件很方便)。我能想到的唯一其他方法是在 global.asax 中 Hook 到错误事件并自己处理它(这将忽略 customErrors)

类似于:

public class Global : System.Web.HttpApplication
{
protected void Application_Error(object sender, EventArgs e)
{
// is there an error ?
var error = Server.GetLastError();
if (error != null)
{
// mark the error as - "i'll handle it myself"
Server.ClearError();
// load error.html manually & dump it to response
var content = File.ReadAllText(Server.MapPath("~/error.html"));
Context.Response.Write(content);
// set correct error code
Context.Response.StatusCode = 500;
}
}
}

注意:这个是可以解决的,但是你看大体原理...

关于c# - customErrors 与自定义模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40151520/

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