使用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有什么关系?
答案 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路由选择任何没有映射到特定控制器/动作或参数类型的东西,那么你必须明确定义所有可能的路由 - 不一定是一项简单的任务。