Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何让应用程序显示正确的HTTP错误代码_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 如何让应用程序显示正确的HTTP错误代码

C# 如何让应用程序显示正确的HTTP错误代码,c#,asp.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我正在使用ASP.NET MVC3并在Windows Server 2003上运行该网站。我正在试图找出如何处理所有HTTP错误。我已经实现了代码,但当返回404错误时,浏览器中有时会显示403错误 以下是我已经实现的代码: 在myglobal.asax.cs中: protected void Application_Error(object sender, EventArgs e) { MvcApplication app = (MvcApplication)sender;

我正在使用
ASP.NET MVC3
并在
Windows Server 2003
上运行该网站。我正在试图找出如何处理所有HTTP错误。我已经实现了代码,但当返回404错误时,浏览器中有时会显示403错误

以下是我已经实现的代码:

在my
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\u code
和类似目录)时,我希望它显示正确的错误。这可能吗

当我输入
http://localhost:43596/app_code
然后我看到它似乎是一个404错误,但它显示了IE的默认403错误页面。如何让我的代码显示正确的HTTP错误消息

我之所以希望这样做,是因为如果用户试图以任何方式破坏网站,我需要记录所有尝试。我想知道是谁做错了

当我输入
http://localhost:43596/app_code
然后我看到它 似乎是404错误,但它显示的是默认的403错误页 即

403怎么了

在万维网上使用的HTTP中,403禁止是HTTP 当用户请求网页时,web服务器返回的状态代码 或服务器不允许他们访问的媒体。换句话说 也就是说,服务器可以访问,但服务器拒绝允许 访问该页面Microsoft IIS在中响应 目录列表被拒绝时的方式相同。

当用户试图访问
App\u Data
文件夹时,如果您返回404,则对用户而言,该文件夹在服务器中不存在,但事实是该文件夹可能存在,也可能不存在,而且由于它是一个特殊文件夹,ASP.NET不允许任何人访问该文件夹,并且它是被禁止的,因此我认为返回403在服务器中完全有效这个案子

当我输入
http://localhost:43596/app_code
然后我看到它 似乎是404错误,但它显示的是默认的403错误页 即

403怎么了

在万维网上使用的HTTP中,403禁止是HTTP 当用户请求网页时,web服务器返回的状态代码 或服务器不允许他们访问的媒体。换句话说 也就是说,服务器可以访问,但服务器拒绝允许 访问该页面Microsoft IIS在中响应 目录列表被拒绝时的方式相同。

当用户试图访问
App\u Data
文件夹时,如果您返回404,则对用户而言,该文件夹在服务器中不存在,但事实是该文件夹可能存在,也可能不存在,而且由于它是一个特殊文件夹,ASP.NET不允许任何人访问该文件夹,并且它是被禁止的,因此我认为返回403在服务器中完全有效这个案子


尝试查看web.config部分“customErrors”设置“mode=Off”



尝试查看web.config部分“customErrors”设置“mode=Off”


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