在我的MVC Web应用程序中,我需要一个404页面来解决所有错误。我编辑了web.config文件,其中包含以下行:
<customErrors mode="On">
<error redirect="/error/404" statusCode="404" />
</customErros>
它工作,但在浏览器网址中我看到了网址/错误/ 404。我怎么看到被叫URL?
感谢。
答案 0 :(得分:0)
customErrors
节点实际上早于httpErrors
,请尝试使用此节点。确保web.config
中的这些节点作为system.webServer
节点的子节点:
<httpErrors>
<error statusCode="404" path="/error/404" responseMode="ExecuteURL" />
</httpErrors>
或者,您可以使用customErrors
以两种方式执行此操作:
首先是修改单个error
节点,第二个是更改customErrors
节点。我不记得其中一个现在已经过时了,但是可以随意尝试这两个。
<error statusCode="404" path="/error/404" responseMode="ExecuteURL"/>
或强>
<customErrors mode="On" redirectMode="ResponseRewrite">
如果上述情况不起作用,其他事情就会发生。你检查过IIS日志吗?
<强>链接强>
答案 1 :(得分:0)
我在global.asax中使用Application_error部分解决。我添加了这个方法
protected void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError();
var httpException = exception as HttpException;
if (httpException != null && httpException.GetHttpCode() == 404)
{
Response.Clear();
Server.ClearError();
Response.TrySkipIisCustomErrors = true;
IController controller = new CommonController();
var routeData = new RouteData();
routeData.Values.Add("controller", "Common");
routeData.Values.Add("action", "PageNotFound");
var requestContext = new RequestContext(
new HttpContextWrapper(Context), routeData);
controller.Execute(requestContext);
}
}
这项工作很好。问题来自控制器:.i.e。如果我没有找到db记录,我想在默认错误页面返回404错误。我还想在浏览器中显示原始名为url的内容,而不是重定向网址。使用return View();在控制器中,这不会发生。我怎么解决呢?感谢。