sim*_*olo 9 asp.net asp.net-mvc exception-handling
出于某种原因,当将dud URL输入到不存在的文件/目录/控制器时,会引发以下错误:
System.Web.HttpException未找到路径''的控制器或未实现IController System.Web.Mvc.IController> GetControllerInstance(System.Web.Routing.RequestContext,System.Type)
IIS然后遵循常规错误处理并显示适用于500内部服务器错误的页面.应遵循404 Not Found错误处理逻辑. 我正在测试的另一个Web应用程序在找不到路由时不会抛出此HttpException,并正常返回404.那么触发这个HttpException是什么?
为什么以及如何遵循404路由来处理此类错误而不是500? 以下是错误处理的配置.没有其他代码处理错误.那么为什么总会显示500错误呢?就好像默认处理将"无法找到控制器"异常作为错误处理,而实际上它是未找到的.
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace" defaultPath="/StaticErrors/Default.html" defaultResponseMode="ExecuteURL">
<clear />
<error statusCode="404" path="/mvcError/Http404" responseMode="ExecuteURL" />
<error statusCode="500" path="/mvcError/Http500" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
<system.web>
<customErrors defaultRedirect="/StaticErrors/Default.html" mode="On" redirectMode="ResponseRewrite">
<error redirect="/mvcError/Http404" statusCode="404" />
<error redirect="/mvcError/Http500" statusCode="500" />
</customErrors>
</system.web>
Run Code Online (Sandbox Code Playgroud)
失败的请求跟踪显示了这一点.基本上没有路由是圆的,抛出HttpException,500路由处理开始,而不是404.我没有做任何事情来覆盖任何正常的默认行为.在HandleErrorAttribute不添加任何的MVC过滤器.

您应该添加一个过滤器控制器来覆盖某些 IIS 自定义错误。
public class mvcErrorController : Controller
{
public ActionResult Http404()
{
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3512 次 |
| 最近记录: |