我正在尝试处理错误并为404,403等显示适当的页面。
为此,我制作了一个错误处理过滤器,它可以像预期的那样工作。也就是说,当我试图要求
mysite.com/Home/random_non-existent_action
用户被重定向到我的自定义404页面,并作为响应代码返回404。这同样适用于401和403。
我已经通过错误处理过滤器和在web上进行的修改实现了这一点。配置为:
这就是问题开始的地方,我们的客户也想自定义IIS的错误页面,例如当我请求时
mysite.com/images,
正在显示IIS错误页,因为目录浏览已禁用,并且由于在IIS级别阻止了此操作,因此我的错误处理筛选器无法工作。
为了覆盖IIS错误页面,我向web.config添加了以下代码
现在,当我请求时,customErrors和httpErrors都出现在我的web.config中
mysite.com/Home/random_non-existent_action
显示了我的自定义404页面(因为它被IIS绕过并且我的错误处理过滤器有效)。但是当我请求
mysite.com/content
或
mysite.com/images
我得到一个404状态代码的空白响应。
当我将responseMode改为Redirect(而不是ExecuteURL)时,它工作了。但是很明显,我试图用相对路径导航到我的自定义错误页面。
1-为什么当我尝试覆盖IIS自定义错误页面时,我得到一个空白响应?
2-为什么它在我做出响应模式="重定向"但不响应模式="执行URL"时起作用
任何帮助将不胜感激,因为我搜索了许多类似的堆栈溢出主题,但没有成功。
我尝试了existingResponse和responseMode值的所有组合。除了responseMode="Redirect "之外的任何内容都会使其空白,并带有相应的状态代码。
编辑:
我最终做的是,
编写html内容并使用javascript重定向到我的自定义错误页面。
在MVC 5中,我遇到了同样的问题。我在Global.asax中处理这些错误来解决这个问题。
public void Application_Error(Object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Server.ClearError();
var routeData = new RouteData();
routeData.Values.Add("area", "");
routeData.Values.Add("controller", "SystemAdministration");
if (exception.GetType() == typeof(HttpException))
{
var code = ((HttpException) exception).GetHttpCode();
if (code == 404)
{
routeData.Values.Add("action", "NotFound");
}
else if (code == 403 || code == 401)
{
routeData.Values.Add("action", "NoAuthorization");
}
else
{
routeData.Values.Add("action", "Index");
routeData.Values.Add("statusCode", code);
}
}
else
{
routeData.Values.Add("action", "Index");
routeData.Values.Add("statusCode", 500);
}
routeData.Values.Add("exception", exception);
Response.TrySkipIisCustomErrors = true;
IController controller = new ErrorController();
controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
Response.End();
}
希望这对你有用...
所有的错误最终都会被 Tango.ErrHandler 进行处理。 你可以自定义你的错误处理方式来替代默认的。例如: var ( prefix = "<html><head>tango</head><body><div>" suffix = fmt.Sprintf("</div><div>version: %s</div></body></html>", tango.Version
404和500错误客户端和服务端都会通过error.js组件处理。如果你想改写它,则新建_error.js在文件夹中: import React from 'react' export default class Error extends React.Component { static getInitialProps({ res, err }) { const statusCod
修改日志 2019-07-30 优化了 logger.go,日志新增了返回数据。 调用 alarm.WeChat("错误信息") alarm.Email("错误信息") alarm.Sms("错误信息") alarm.Panic("错误信息") 运行 下载源码后,请先执行 dep ensure 下载依赖包! 效果 {"time":"2019-07-23 22:55:27","alarm":
修改日志 2019-07-30 优化了 logger.go,日志新增了返回数据。 调用 alarm.WeChat("错误信息") alarm.Email("错误信息") alarm.Sms("错误信息") alarm.Panic("错误信息") 运行 下载源码后,请先执行 dep ensure 下载依赖包! 效果 {"time":"2019-07-23 22:55:27","alarm":
概述 开始今天的文章,为什么要自定义错误处理?默认的错误处理方式是什么? 那好,咱们就先说下默认的错误处理。 默认的错误处理是 errors.New("错误信息"),这个信息通过 error 类型的返回值进行返回。 举个简单的例子: func hello(name string) (str string, err error) { if name == "" { err =
问题内容: 我想为Flask-restful API定义自定义错误处理。 在文档中建议的方法在这里是要做到以下几点: 现在,我发现这种格式非常吸引人,但是当发生某些异常时,我需要指定更多参数。例如,遇到时·,我要指定id不存在的内容。 目前,我正在执行以下操作: 当使用不存在的ID调用时,将返回以下JSON: 这工作正常,但我想改用错误处理。 问题答案: 根据文档 Flask-RESTful将在F