在ASP.net中的自定义错误页面中返回请求的URL

时间:2009-11-25 03:22:13

标签: asp.net custom-error-pages

使用ASP.net 3.5和MVC 1.0。

我想要做的是在自定义错误页面中返回生成404错误的请求的URL。就像Google在错误页面上做的那样(http://www.google.com/test)。

例如

很抱歉,此服务器上不存在请求的地址“http://www.domain.com/nonexistantpage.aspx”。

实现这种软404的最佳方法是什么?

另外,作为旁注:任何熟悉返回自定义错误页面的人都代替丑陋的...未发现?aspxerrorpath = / awdawd废话,同时将请求的URL保留在浏览器的地址中酒吧? ...我怀疑与server.transfer有什么关系?

1 个答案:

答案 0 :(得分:0)

查看与此主题相关的以下资源:

总而言之,您可以通过定义执行特定控制器操作的全能路由来保持请求的URL,从而完成类似Google的实现。

//defined below all other routes
routes.MapRoute(
    "Catch All",
    "{*path}", 
    new { controller = "Error", action = "NotFound" }
);

public ActionResult NotFound(string path)
{
    Response.StatusCode = (int)HttpStatusCode.NotFound;
    ViewData["path"] = path; //or Request.Url.ToString() if you want full url
    return View();
}

但这不是一个完整的解决方案。假设您已经离开了默认路由映射,那么匹配{Controller}/{action}/{id}的任何内容仍然会抛出传统的404或自定义错误。如果你真的希望让catch-all路由选择任何没有映射到特定控制器/动作或参数类型的东西,那么你必须明确定义所有可能的路由 - 不一定是一项简单的任务。