2012-06-02 31 views
1

我正在使用ASP.NET MVC3并运行网站Windows Server 2003。我想弄清楚如何处理所有的HTTP错误。我已经实现了代码,但是当返回404错误时,我有时会在浏览器中显示403错误。如何让您的应用程序显示正确的HTTP错误代码

这里是我的代码,我已经实现了:

在我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错误消息?

我之所以要这样做,是因为我需要记录所有尝试,如果用户试图以任何方式破坏网站。我希望能够看到谁在做错访问。

回答

1

当我在http://localhost:43596/app_code类型,然后我看到它 似乎是一个404错误,但它显示 IE默认的403错误页面。

403有什么问题?

在万维网上使用的HTTP,403禁止由Web服务器返回一个HTTP 状态代码,当用户请求一个网页 或媒体服务器不能让他们进入。在其他 字样中,可以到达服务器,但服务器拒绝允许 访问该页面。 当目录列表被拒绝时,Microsoft IIS以 的响应方式相同。

Wikipedia

当用户试图访问App_Data文件夹,如果返回404这意味着该文件夹不存在于服务器的用户,但事实是该文件夹可能会或可能不会存在,因为它是一个特殊的文件夹ASP.NET不允许任何人访问它,它被禁止,所以我认为返回403在这种情况下是完全有效的。

404 vs 403 when directory index is missing

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

0

尝试审查的web.config节 “的customErrors” 设置 “= OFF”

<configuration> 
<system.web> 
    <customErrors defaultRedirect="GenericError.htm" mode="RemoteOnly"> 
    <error statusCode="500" redirect="InternalError.htm"/> 
</customErrors> 

相关问题