如何在HandleUnauthorizedRequest中输出默认的404页面

时间:2011-01-24 17:03:44

标签: c# asp.net-mvc-2 http-status-code-404 authorize-attribute

我写了一个覆盖AuthorizeAttribute的自定义HandleUnauthorizedRequest。此覆盖有条件地将响应状态代码设置为404,其中包含:

var response = filterContext.HttpContext.Response;
response.StatusCode = 404;
response.ContentType = null;
response.End();

问题在于完整的回复是:

HTTP/1.1 404 Not Found
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 24 Jan 2011 16:43:08 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 2.0
Cache-Control: private
Connection: Close
 

当我想发回默认的404页面时。类似的东西:


Screenshot of the default ASP.NET 404 page


我该怎么做?

2 个答案:

答案 0 :(得分:0)

怎么样: 在Web.config中创建自定义404处理程序,如下所示:

<customErrors mode="On">
<error statusCode="404" redirect="My404ErrorPage.aspx" />
</customErrors>

现在所有404错误都转到My404ErrorPage.aspx(或者您选择命名的任何内容)     您的错误页面),您也可以随意重定向到它。

也许"Response.WriteError(404);

答案 1 :(得分:0)

我最终要做的是设置过滤器上下文的Result属性,如下所示:

var response = filterContext.HttpContext.Response;
response.StatusCode = 404;
var viewData = new ViewDataDictionary();
viewData["Id"] = filterContext.HttpContext.Request.RequestContext.RouteData.Values["id"];
filterContext.Result = new ViewResult { ViewName = "NotFound", ViewData = viewData };
return;

其中“NotFound”是控制器的一项操作,其中包含使用我的自定义AuthorizeAttribute标记的其他操作。