【发布时间】:2016-10-07 09:03:25
【问题描述】:
我正在用 asp net mvc 5 开发新网站。我想创建自定义 404 页面,尝试访问旧 url 的用户将被重定向。问题是我想为这个错误页面创建视图并从 url 中获取参数,试图识别用户试图访问的产品。但我还没有找到如何创建它的解决方案。像这样编辑 webconfig 的所有示例:
<defaultRedirect="~/Errors/NotFound" mode="Off">
<error statusCode="404" redirect="~/Errors/NotFound" />
</customErrors>
不会传递参数。我试图禁用自定义错误并在 Global.asax 中进行更改:
public void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
if (httpException != null)
{
if(httpException.GetHttpCode() == 404)
{
var rd = new RouteData();
rd.Values["controller"] = "Errors";
rd.Values["action"] = "NotFound";
rd.Values.Add("queryString", HttpContext.Current.Request.Url.AbsolutePath);
IController c = new ErrorsController();
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
}
}
}
但它仍然返回标准错误页面
【问题讨论】:
-
我以前从未见过这种重定向到错误页面的方式。您是否尝试过使用
return RedirectToAction("NotFound", "Errors");? -
另外,如果您只输入指向错误页面的 URL
http://localhost:57623/Errors/NotFound,会发生什么? -
我不相信传递参数是有效的(至少不是在所有情况下——请记住,如果错误发生在 IIS 中,重定向会在调用 ASP.NET 之前发生)。但是,this article 会在选项应用于自定义页面和日志记录时对其进行检查。请注意,传递参数是不常见的,因为最佳做法是记录错误并为每个状态代码显示一个通用页面 - 否则黑客可以使用您网站的输出(参数)来查找漏洞。
标签: c# asp.net asp.net-mvc asp.net-mvc-4