在 ASP.NET MVC 中出现 returns 404 时创建自定义错误
Create custom error when it returns 404 in ASP.NET MVC
我尝试搜索并找到了一些解决方案。我试过了,但没有运气。大多数公认的解决方案是配置您的 Web.config
文件我试过了,但它仍然是 return 默认错误页面
<configuration>
<system.web>
<customErrors mode="On">
<error statusCode="404"
redirect="~/Error/Error404" />
</customErrors>
</system.web>
</configuration>
还有其他配置方法吗?
我不想在 IIS 中配置它
此解决方案不需要 web.config 文件更改或包罗万象的路由。
首先,像这样创建一个控制器;
public class ErrorController : Controller
{
public ActionResult Index()
{
ViewBag.Title = "Regular Error";
return View();
}
public ActionResult NotFound404()
{
ViewBag.Title = "Error 404 - File not Found";
return View("Index");
}
}
然后在"Views/Error/Index.cshtml"下创建视图为;
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<p>We're sorry, page you're looking for is, sadly, not here.</p>
然后在全局asax文件中添加如下内容:
protected void Application_Error(object sender, EventArgs e)
{
// Do whatever you want to do with the error
//Show the custom error page...
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
if ((Context.Server.GetLastError() is HttpException) && ((Context.Server.GetLastError() as HttpException).GetHttpCode() != 404))
{
routeData.Values["action"] = "Index";
}
else
{
// Handle 404 error and response code
Response.StatusCode = 404;
routeData.Values["action"] = "NotFound404";
}
Response.TrySkipIisCustomErrors = true; // If you are using IIS7, have this line
IController errorsController = new ErrorController();
HttpContextWrapper wrapper = new HttpContextWrapper(Context);
var rc = new System.Web.Routing.RequestContext(wrapper, routeData);
errorsController.Execute(rc);
}
如果执行此操作后仍然出现自定义 IIS 错误页面,请确保在 Web 配置文件中将以下部分注释掉(或留空):
<system.web>
<customErrors mode="Off" />
</system.web>
<system.webServer>
<httpErrors>
</httpErrors>
</system.webServer>
我尝试搜索并找到了一些解决方案。我试过了,但没有运气。大多数公认的解决方案是配置您的 Web.config
文件我试过了,但它仍然是 return 默认错误页面
<configuration>
<system.web>
<customErrors mode="On">
<error statusCode="404"
redirect="~/Error/Error404" />
</customErrors>
</system.web>
</configuration>
还有其他配置方法吗?
我不想在 IIS 中配置它
此解决方案不需要 web.config 文件更改或包罗万象的路由。
首先,像这样创建一个控制器;
public class ErrorController : Controller
{
public ActionResult Index()
{
ViewBag.Title = "Regular Error";
return View();
}
public ActionResult NotFound404()
{
ViewBag.Title = "Error 404 - File not Found";
return View("Index");
}
}
然后在"Views/Error/Index.cshtml"下创建视图为;
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<p>We're sorry, page you're looking for is, sadly, not here.</p>
然后在全局asax文件中添加如下内容:
protected void Application_Error(object sender, EventArgs e)
{
// Do whatever you want to do with the error
//Show the custom error page...
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
if ((Context.Server.GetLastError() is HttpException) && ((Context.Server.GetLastError() as HttpException).GetHttpCode() != 404))
{
routeData.Values["action"] = "Index";
}
else
{
// Handle 404 error and response code
Response.StatusCode = 404;
routeData.Values["action"] = "NotFound404";
}
Response.TrySkipIisCustomErrors = true; // If you are using IIS7, have this line
IController errorsController = new ErrorController();
HttpContextWrapper wrapper = new HttpContextWrapper(Context);
var rc = new System.Web.Routing.RequestContext(wrapper, routeData);
errorsController.Execute(rc);
}
如果执行此操作后仍然出现自定义 IIS 错误页面,请确保在 Web 配置文件中将以下部分注释掉(或留空):
<system.web>
<customErrors mode="Off" />
</system.web>
<system.webServer>
<httpErrors>
</httpErrors>
</system.webServer>