如何让应用显示正确的 HTTP 错误代码
本文关键字:HTTP 错误代码 显示 应用 | 更新日期: 2023-09-27 18:36:15
我正在使用ASP.NET MVC3
并在Windows Server 2003
上运行网站。 我正在尝试弄清楚如何处理所有HTTP错误。 我已经实现了代码,但是当返回 404 错误时,我有时会在浏览器中显示 404 错误。
这是我实现的代码:
在我的global.asax.cs
:
protected void Application_Error(object sender, EventArgs e)
{
MvcApplication app = (MvcApplication)sender;
HttpContext context = app.Context;
Exception exception = app.Server.GetLastError();
context.Response.Clear();
context.ClearError();
HttpException httpException = exception as HttpException;
RouteData routeData = new RouteData();
routeData.Values["controller"] = "Error";
routeData.Values["action"] = "Index";
routeData.Values["httpException"] = httpException;
Server.ClearError();
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}
ErrorController.cs
文件:
public class ErrorController : Controller
{
public ActionResult Index()
{
ErrorModel model = new ErrorModel();
HttpException httpException = RouteData.Values["httpException"] as HttpException;
int httpCode = (httpException == null) ? 500 : httpException.GetHttpCode();
switch (httpCode)
{
case 403:
//Response.StatusCode = 403;
model.Heading = "Forbidden";
model.Message = "You aren't authorised to access this page.";
break;
case 404:
//Response.StatusCode = 404;
model.Heading = "Page not found";
model.Message = "We couldn't find the page you requested.";
break;
case 500:
default:
Response.StatusCode = 500;
model.Heading = "Error";
model.Message = "Sorry, something went wrong. It's been logged.";
break;
}
Response.TrySkipIisCustomErrors = true;
return View(model);
}
}
我的 web.config 中没有任何设置。
我希望它在用户尝试访问我的目录(例如app_code
和类似目录)时显示正确的错误。 这可能吗?
当我输入http://localhost:43596/app_code
时,我看到它似乎是 404 错误,但它显示了 IE 的默认 403 错误页面。 如何让我的代码显示正确的 HTTP 错误消息?
我之所以想要这种方式,是因为如果用户试图以任何方式破坏网站,我需要记录所有尝试。 我希望能够看到谁在进行错误的访问。
当我输入
http://localhost:43596/app_code
时,我看到它 似乎是 404 错误,但它显示默认的 403 错误页面 即。
403怎么了?
在万维网使用的HTTP中,403 Forbidden是一个HTTP 用户请求网页时 Web 服务器返回的状态代码 或服务器不允许他们访问的媒体。在其他 话,可以到达服务器,但服务器拒绝允许 访问该页面。Microsoft IIS 响应 当目录列表被拒绝时,方式相同。
维基百科
当用户尝试访问 App_Data
文件夹并且如果您返回 404 时,对用户来说意味着该文件夹不存在服务器,但事实是该文件夹可能存在也可能不存在,并且由于它是一个特殊的文件夹 ASP.NET 不允许任何人访问它并且它是被禁止的,所以我认为在这种情况下返回 403 是完全有效的。
404 与 403 当目录索引丢失时
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
尝试查看 web.config 部分 "自定义错误" 设置"模式=关闭"
<configuration>
<system.web>
<customErrors defaultRedirect="GenericError.htm" mode="RemoteOnly">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>