1

我已经编写了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 页面时。就像是:


默认 ASP.NET 404 页面的屏幕截图


我怎么做?

4

2 回答 2

0

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

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

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

也许"Response.WriteError(404);

于 2011-01-24T17:09:19.163 回答
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”是控制器的一个动作,其中包含一个用我的 custom 标记的不同动作AuthorizeAttribute

于 2011-01-24T20:38:40.370 回答