CMi*_*cea 5 iis asp.net-mvc azure asp.net-mvc-3
我无法设置IIS来为我的自定义错误页面提供MVC管道之外的错误.如果我在控制器中抛出一个异常,它就是所有文件,Application_Error事件处理:
protected void Application_Error(object sender, EventArgs e)
{
var error = Server.GetLastError();
var routeData = new RouteData();
routeData.Values["Controller"] = "Error";
routeData.Values["Area"] = "";
routeData.Values["Exception"] = error;
if (error is HttpException)
{
switch (((HttpException)error).GetHttpCode())
{
case 401:
routeData.Values["Action"] = "NotAllowed";
break;
case 403:
routeData.Values["Action"] = "NotAllowed";
break;
case 404:
routeData.Values["Action"] = "NotFound";
break;
default:
routeData.Values["Action"] = "ServerError";
break;
}
}
else
{
routeData.Values["Action"] = "ServerError";
}
Response.Clear();
Server.ClearError();
IController controller = new ErrorController();
controller.Execute(new RequestContext(new HttpContextWrapper(((MvcApplication)sender).Context), routeData));
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我浏览到不存在的URL,IIS将处理404错误(或任何其他错误),给我标准的IIS错误消息并完全忽略我的web.config设置:
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="/error">
<error statusCode="401" redirect="/error/notallowed" />
<error statusCode="403" redirect="/error/notallowed" />
<error statusCode="404" redirect="/error/notfound" />
<error statusCode="500" redirect="/error/servererror" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
<clear />
<error statusCode="401" path="/error/notallowed" />
<error statusCode="403" path="/error/notallowed" />
<error statusCode="404" path="/error/notfound" />
<error statusCode="500" path="/error/servererror" />
</httpErrors>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

/ error/*由我的应用程序内的控制器处理.我该怎么做才能让IIS执行自定义错误路径,而不是给我标准的错误页面?
这是在Azure上运行的ASP.NET MVC 3.它在直接IIS下也不起作用,但开发服务器确实执行控制器.
IIS不尊重defaultResponseMode.您必须将responseMode添加到每个错误中,如下所示:
<httpErrors errorMode="Custom">
<clear />
<error statusCode="401" path="/error/notallowed" responseMode="ExecuteURL" />
<error statusCode="403" path="/error/notallowed" responseMode="ExecuteURL" />
<error statusCode="404" path="/error/notfound" responseMode="ExecuteURL" />
<error statusCode="500" path="/error/servererror" responseMode="ExecuteURL" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
为什么默认不适用超出我的范围.
我遇到了这个问题,我在 Azure 上,以下为我解决了这个问题:
Response.TrySkipIisCustomErrors = true;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7376 次 |
| 最近记录: |