- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我的目标是在应用程序中创建一个错误处理程序来处理所有托管错误,而不仅仅是与 MVC 相关的错误。所以我没有使用 HandleErrorAttribute 模式,因为它只针对 MVC 错误,而不是其他托管错误。
在我的 Global.asax 中我有:
protected void Application_Error()
{
string displayError = ConfigurationManager.AppSettings["DisplayError"];
NameValueCollection serverVariables;
int loop1, loop2;
StringBuilder serverVariableKeys = new StringBuilder();
Exception exception = Server.GetLastError();
HttpException httpException = exception as HttpException;
if (HttpContext.Current != null)
{
// loop through and get server vars
}
if (exception != null)
// Log Error
// Redirect to Error page if set to basic mode
if (!string.IsNullOrWhiteSpace(displayError) && displayError.ToLower() == "basic")
{
Response.Clear();
Server.ClearError(); // needed for redirect to work
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
routeData.Values["action"] = "General";
routeData.Values["exception"] = exception;
Response.StatusCode = 500;
if (httpException != null)
{
Response.StatusCode = httpException.GetHttpCode();
switch (Response.StatusCode)
{
case 403:
routeData.Values["action"] = "Http403";
break;
case 404:
routeData.Values["action"] = "Http404";
break;
}
}
IController errorsController = new Controllers.ErrorController();
var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
errorsController.Execute(rc);
}
}
我有一个 ErrorController
有 General
, Http403
和 Http404
行动。我有对应于每个 Action 的 View 。
在我的 web.config 中我有:
<system.web>
<!-- removed bits to reduce space -->
<customErrors mode="On" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules >
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
<remove name="Session"/>
<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition=""/>
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<httpErrors errorMode="Detailed" />
</system.webServer>
这适用于许多与托管代码相关的场景,但当 IIS 接管时,例如错误的静态文件调用 (example.com/BadFileName.gif),它将从 IIS 返回一个错误,该错误会泄露服务器详细信息,例如本地文件路径.这是因为 web.config 中的以下行:
<httpErrors errorMode="Detailed" />
但是,当我将 errorMode 设置为其他值(如自定义)或只是删除该行时,我的自定义错误处理将停止运行,并且会为包括托管代码错误在内的所有内容返回默认的 IIS 错误消息。
我已经尝试了很多方法来使自定义错误在没有此设置的情况下正常工作,但没有任何运气,包括:
CustomError
至 mode="Off"
customError
下定义错误节点重定向到我的 Controller httpErrors
下定义错误节点重定向到我的 Controller 当我逐步调试时,我可以看到对 Controller 的调用,但最后 IIS 发送了响应。错误日志记录确实被正确调用了 Application_Error,因此代码确实让应用程序将其处理到某个点。
申请详情:
有没有办法不使用 <httpErrors errorMode="Detailed" />
并让这个工作?
最佳答案
您看到该行为的原因可能是您的 Application_Error
处理程序被正确调用(并调用您的 Controller ),但随后 IIS 拦截了 500 错误并显示了它自己的错误页面。 (尽管您的 Application_Error
处理程序本身也可能抛出一个 Exception
,但您需要排除这种情况)
因为您想处理所有错误(例如您提到的静态文件错误),您可能无法依赖 ASP.NET 或 ASP.NET MVC 为您进行初始错误检测。 并非所有错误都来自您的应用程序!
最好的办法是尽可能多地依靠 IIS 7.5 的错误处理,而不是过早地尝试自己介入。让 IIS 为您进行初始错误检测,这会容易得多。
尝试将以下内容放入您的 web.config
中,替换您现有的 httpErrors
节点:-
<httpErrors errorMode="Custom" existingResponse="Replace">
<clear />
<error statusCode="400" responseMode="ExecuteURL" path="/Error" />
<error statusCode="403" responseMode="ExecuteURL" path="/Error/Forbidden" />
<error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" />
<error statusCode="500" responseMode="ExecuteURL" path="/Error" />
</httpErrors>
完全删除 customErrors
节点。这是不必要的。
记住并确保你的错误 Controller 设置了正确的状态代码:-
public ActionResult Forbidden()
{
Response.StatusCode = 403;
return this.View();
}
然后您应该能够放弃除注销您的 Application_Error
处理程序之外的所有内容 - 尽管我认为您最好创建自己的 HttpModule
;在 web.config
中的模块节点上设置 runAllManagedModulesForAllRequests
可帮助您捕获否则会漏掉的错误。
我已经在 Azure 网站预览版上运行了这个设置(尽管我个人使用 elmah 进行日志记录),它捕获了所有内容,除了显然由于未能解析 web.配置
.
我放了一个 full working example of using httpErrors for custom error pages up on github .您也可以see it live on azure web sites .
关于c# - ASP.NET MVC 自定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14532039/
好的,所以我编辑了以下... 只需将以下内容放入我的 custom.css #rt-utility .rt-block {CODE HERE} 但是当我尝试改变... 与 #rt-sideslid
在表格 View 中,我有一个自定义单元格(在界面生成器中高度为 500)。在该单元格中,我有一个 Collection View ,我按 (10,10,10,10) 固定到边缘。但是在 tablev
对于我的无能,我很抱歉,但总的来说,我对 Cocoa、Swift 和面向对象编程还很陌生。我的主要来源是《Cocoa Programming for OS X》(第 5 版),以及 Apple 的充满
我正在使用 meta-tegra 为我的 NVIDIA Jetson Nano 构建自定义图像。我需要 PyTorch,但没有它的配方。我在设备上构建了 PyTorch,并将其打包到设备上的轮子中。现
在 jquery 中使用 $.POST 和 $.GET 时,有没有办法将自定义变量添加到 URL 并发送它们?我尝试了以下方法: $.ajax({type:"POST", url:"file.php?
Traefik 已经默认实现了很多中间件,可以满足大部分我们日常的需求,但是在实际工作中,用户仍然还是有自定义中间件的需求,为解决这个问题,官方推出了一个 Traefik Pilot[1] 的功
我想让我的 CustomTextInputLayout 将 Widget.MaterialComponents.TextInputLayout.OutlinedBox 作为默认样式,无需在 XML 中
我在 ~/.emacs 中有以下自定义函数: (defun xi-rgrep (term) (grep-compute-defaults) (interactive "sSearch Te
我有下表: 考虑到每个月的权重,我的目标是在 5 个月内分散 10,000 个单位。与 10,000 相邻的行是我最好的尝试(我在这上面花了几个小时)。黄色是我所追求的。 我试图用来计算的逻辑如下:计
我的表单中有一个字段,它是文件类型。当用户点击保存图标时,我想自然地将文件上传到服务器并将文件名保存在数据库中。我尝试通过回显文件名来测试它,但它似乎不起作用。另外,如何将文件名添加到数据库中?是在模
我有一个 python 脚本来发送电子邮件,它工作得很好,但问题是当我检查我的电子邮件收件箱时。 我希望该用户名是自定义用户名,而不是整个电子邮件地址。 最佳答案 发件人地址应该使用的格式是: You
我想减小 ggcorrplot 中标记的大小,并减少文本和绘图之间的空间。 library(ggcorrplot) data(mtcars) corr <- round(cor(mtcars), 1)
GTK+ noob 问题在这里: 是否可以自定义 GtkFileChooserButton 或 GtkFileChooserDialog 以删除“位置”部分(左侧)和顶部的“位置”输入框? 我实际上要
我正在尝试在主页上使用 ajax 在 magento 中使用 ajax 显示流行的产品列表,我可以为 5 或“N”个产品执行此操作,但我想要的是将分页工具栏与结果集一起添加. 这是我添加的以显示流行产
我正在尝试使用 PasswordResetForm 内置函数。 由于我想要自定义表单字段,因此我编写了自己的表单: class FpasswordForm(PasswordResetForm):
据我了解,新的 Angular 7 提供了拖放功能。我搜索了有关 DnD 的 Tree 组件,但没有找到与树相关的内容。 我在 Stackblitz 上找到的一个工作示例.对比drag'ndrop功能
我必须开发一个自定义选项卡控件并决定使用 WPF/XAML 创建它,因为我无论如何都打算学习它。完成后应该是这样的: 到目前为止,我取得了很好的进展,但还有两个问题: 只有第一个/最后一个标签项应该有
我要定制xtable用于导出到 LaTeX。我知道有些问题是关于 xtable在这里,但我找不到我要找的具体东西。 以下是我的表的外观示例: my.table <- data.frame(Specif
用ejs在这里显示日期 它给我结果 Tue Feb 02 2016 16:02:24 GMT+0530 (IST) 但是我需要表现为 19th January, 2016 如何在ejs中执行此操作?
我想问在 JavaFX 中使用自定义对象制作 ListView 的最佳方法,我想要一个每个项目如下所示的列表: 我搜了一下,发现大部分人都是用细胞工厂的方法来做的。有没有其他办法?例如使用客户 fxm
我是一名优秀的程序员,十分优秀!