gpt4 book ai didi

asp.net-mvc - 如何在 ASP.NET MVC 中正确处理 404?

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:49 25 4
gpt4 key购买 nike

我正在使用 RC2

使用 URL 路由:

routes.MapRoute(
"Error",
"{*url}",
new { controller = "Errors", action = "NotFound" } // 404s
);

上面似乎处理了这样的请求(假设默认路由表由初始 MVC 项目设置):“/blah/blah/blah/blah”

在 Controller 本身中覆盖 HandleUnknownAction():

// 404s - handle here (bad action requested
protected override void HandleUnknownAction(string actionName) {
ViewData["actionName"] = actionName;
View("NotFound").ExecuteResult(this.ControllerContext);
}

但是,之前的策略不处理对错误/未知 Controller 的请求。例如,我没有“/IDoNotExist”,如果我请求它,我会从 Web 服务器获取通用 404 页面,如果我使用路由 + 覆盖,则不是我的 404。

最后,我的问题是:有没有办法使用路由或 MVC 框架本身中的其他东西来捕获这种类型的请求?

或者我是否应该默认使用 Web.Config customErrors 作为我的 404 处理程序而忘记这一切?我假设如果我使用 customErrors,由于 Web.Config 对直接访问的限制,我必须将通用 404 页面存储在/Views 之外。

最佳答案

代码取自http://blogs.microsoft.co.il/blogs/shay/archive/2009/03/06/real-world-error-hadnling-in-asp-net-mvc-rc2.aspx也适用于 ASP.net MVC 1.0

以下是我处理 http 异常的方式:

protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
// Log the exception.

ILogger logger = Container.Resolve<ILogger>();
logger.Error(exception);

Response.Clear();

HttpException httpException = exception as HttpException;

RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");

if (httpException == null)
{
routeData.Values.Add("action", "Index");
}
else //It's an Http Exception, Let's handle it.
{
switch (httpException.GetHttpCode())
{
case 404:
// Page not found.
routeData.Values.Add("action", "HttpError404");
break;
case 500:
// Server error.
routeData.Values.Add("action", "HttpError500");
break;

// Here you can handle Views to other error codes.
// I choose a General error template
default:
routeData.Values.Add("action", "General");
break;
}
}

// Pass exception details to the target error View.
routeData.Values.Add("error", exception);

// Clear the error on server.
Server.ClearError();

// Avoid IIS7 getting in the middle
Response.TrySkipIisCustomErrors = true;

// Call target Controller and pass the routeData.
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(
new HttpContextWrapper(Context), routeData));
}

关于asp.net-mvc - 如何在 ASP.NET MVC 中正确处理 404?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26888079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com