我的问题是关于Pure.Kromes回答这个职位 。 我试着用他的方法实现我的页面自定义错误消息,但也存在一些问题我不能完全解释。
一)当我在无效的网址进入例如localhost招来404错误:3001 / NonexistantPage,则默认为我的错误控制器的SERVERERROR()动作,即使它应该去NOTFOUND()。 这里是我的ErrorController:
public class ErrorController : Controller { public ActionResult NotFound() { Response.TrySkipIisCustomErrors = true; Response.StatusCode = (int)HttpStatusCode.NotFound; var viewModel = new ErrorViewModel() { ServerException = Server.GetLastError(), HTTPStatusCode = Response.StatusCode }; return View(viewModel); } public ActionResult ServerError() { Response.TrySkipIisCustomErrors = true; Response.StatusCode = (int)HttpStatusCode.InternalServerError; var viewModel = new ErrorViewModel() { ServerException = Server.GetLastError(), HTTPStatusCode = Response.StatusCode }; return View(viewModel); } }
在Global.asax.cs中我的错误路线:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
routes.MapRoute(
name: "Error - 404",
url: "NotFound",
defaults: new { controller = "Error", action = "NotFound" }
);
routes.MapRoute(
name: "Error - 500",
url: "ServerError",
defaults: new { controller = "Error", action = "ServerError" }
);
而我的web.config设置:
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="/ServerError">
<error statusCode="404" redirect="/NotFound" />
</customErrors>
...
</system.web>
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/NotFound" responseMode="ExecuteURL" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" path="/ServerError" responseMode="ExecuteURL" />
</httpErrors>
...
错误观点都位于/浏览/错误/如NotFound.cshtml和ServerError.cshtml。
b)一名有趣的是,当一台服务器出现错误,但它其实显示我定义的服务器错误观点,但是它也输出一个默认的错误消息也说,错误页面无法找到。
下面是它的样子:
你有什么建议,我怎么能解决这两个问题? 我真的很喜欢Pure.Kromes方法来实施这些错误消息,但如果有实现这一毫不犹豫地告诉我更好的办法。
谢谢!
**编辑:**我可以直接通过访问/错误/ NOTFOUND或错误/ SERVERERROR导航通过ErrorController自己的看法。
视图自身仅包含一些文本,无标记或任何东西。
正如我所说的,它确实可以工作在某种程度上,只是没有办法,我打算它的工作。 似乎与在web.config重定向一个问题,但我一直没能弄明白。