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错误
以下是我已经实现的代码:
在myglobal.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>