如何让应用显示正确的 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 错误代码

当我输入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>