我有一个标准的ASP.NET MVC应用程序。在这里,我想将所有错误重定向到自定义错误页面。
我试图根据我通常做的事情+谷歌来设置它,但仍然,我没有得到错误。
我有以下 web.config :
<system.web>
<customErrors mode="On" defaultRedirect="~/Error/Index">
<error redirect="~/Error/NotFound" statusCode="404" />
<error redirect="~/Error/Index" statusCode="500" />
</customErrors>
<!-- More stuff :-) -->
</system.web>
<system.webServer>
这是我的错误控制器:
public class ErrorController : Controller
{
public ViewResult Index()
{
return View("Error");
}
public ViewResult NotFound()
{
Response.StatusCode = 404;
return View("NotFound");
}
}
我有以下FilterConfig
:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}
但是,当我在索引控制器中创建错误时:
public ActionResult Index(InvoiceOverviewViewModel vm)
{
// used to test error pages :D
int a = 5;
int b = 0;
int res = a / b;
}
哪个出错,我看到以下内容:
虽然Index.cshtml
中的ErrorController
具有以下视图:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_VerifyLayout.cshtml";
}
<h1>Danish text that doesn't make any sense here ;-) </h1>
是什么让它更奇怪,是我的404页面有效。此页面完全呈现在localhost(not on production)上。
有什么想法吗?
答案 0 :(得分:1)
问题#1:
虽然我在ErrorController中的Index.cshtml有以下内容 视图...
您的错误视图名为Index
,但在ErrorController
中,您尝试返回名称为Error
的未显存视图:
return View("Error");
将ErrorController.Index()
方法更改为:
public ViewResult Index()
{
return View("Index");
}
或调用View()
,不带参数,默认为"Index"
:
public ViewResult Index()
{
return View();
}
问题#2:
filters.Add(new HandleErrorAttribute());
您应该删除HandleErrorAttribute
过滤器。此过滤器将处理控制器操作引发的异常,并且它有自己的逻辑用于选择结果错误视图,这将阻止显示自定义错误页面。特别是,HandleErrorAttribute
使用&#34;〜/ Views / Shared / Error.cshtml&#34;。这是您看到的错误视图的来源 - &#34;处理您的请求时出错。&#34;
希望这会有所帮助。以下是一些有关ASP.NET MVC中错误处理的有用资源: