HTTP 错误 404.0 - 在 MVC 5 中找不到
本文关键字:MVC 找不到 错误 HTTP | 更新日期: 2023-09-27 18:31:02
我在MVC 5中的项目,我想处理404。 我做到了,但问题是
当我使用以下 URL 访问视图时,一切正常且按预期:
http://localhost/Hotels/Index30701000000
但是当我使用以下 URL 访问视图时,我收到 404.0 错误消息(错误如下所示)
http://localhost/Hotels/Edit/09099999dfdfb
http://localhost/Hotels/Edit/090/20130701000000
错误:HTTP 错误 404.0 - 未找到 要查找的资源已被删除、名称已更改或暂时不可用。
我的代码是
控制器
public class ErrorController : Controller
{
// GET: Error
public ActionResult Unauthorized()
{
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
return View();
}
}
路由配置
routes.MapRoute(
name: "Unauthorized",
url: "Unauthorized/{action}/{id}",
defaults: new
{
controller = "Error",
action = "Unauthorized",
id = UrlParameter.Optional
}
);
全球
protected void Application_Error()
{
Exception exception = Server.GetLastError();
HttpException httpException = exception as HttpException;
}
网络配置
<system.web>
<customErrors mode="On" defaultRedirect="Error">
<error statusCode="404" redirect="Unauthorized" />
</customErrors>
</system.web>
View//Unauthorized.cshtml
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = "Unauthorized";
}
<h1>Page Not Found!</h1>
参考链接
另一种方法是在 ErrorController 中定义错误页面,然后在 system 下使用 httpError 部分。Web.config 中的 WebServer 。
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" />
<remove statusCode="500" />
<error statusCode="500" responseMode="ExecuteURL" path="/Error/Error" />
</httpErrors>
上面的代码是为了测试您的自定义页面。但是在您的开发环境中,您可以将 Custom 替换为 errorMode="DetailedLocalOnly" 和 existingResponse="Auto",以便您仍然可以看到详细信息错误。
我最近写了一篇关于它的文章,它附带了一个示例演示项目,您可以在 GitHub 上使用。 http://www.neptunecentury.com/Blogs/ASP-NET/MVC5/MVC-5-How-To-Show-Custom-Error-Pages
只需在应用程序的 global.asax 文件中编写这些代码行即可。
protected void Application_EndRequest()
{
if (Context.Response.StatusCode == 404)
{
if ((!Request.RawUrl.Contains("style")) && (!Request.RawUrl.Contains("images")))
{
Response.Clear();
if (Response.StatusCode == 404)
{
Response.Redirect("/ControllerName/ActionName");
}
}
}
}