我正在使用asp net mvc 5开发新的网站。我想创建自定义404页面,其中试图访问旧网址的用户将被重定向。问题是,我想为此错误页面创建视图,并从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));
}
}
}
但它仍会返回标准错误页面
答案 0 :(得分:0)
你可以试试这个:
RouteValueDictionary rvd = new RouteValueDictionary(){
{
{ "Controller", "Errors" },
{ "Action", "NotFound" }
};
rvd["queryString"] = HttpContext.Current.Request.Url.AbsolutePath;
Response.RedirectToRoute(rvd);
希望它有意义。
答案 1 :(得分:0)
您应该像这样编辑web.config:
N
答案 2 :(得分:0)
解决方案比我想象的要容易。在webconfig中设置自定义错误时
<defaultRedirect="~/Errors/NotFound" mode="On">
<error statusCode="404" redirect="~/Errors/NotFound" />
</customErrors>
请求的URL将在QueryString中,因此可以像这样得到它:
public ActionResult NotFound()
{
var requestedString = Request.QueryString["aspxerrorpath"];
return View();
}