带有参数的Asp net 404页面

时间:2016-06-07 12:42:55

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在使用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));
                }

            }
        }

但它仍会返回标准错误页面

enter image description here

3 个答案:

答案 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();
        }