1

默認的404頁我已經寫了具有HandleUnauthorizedRequest的覆蓋定製AuthorizeAttribute。這個覆蓋有條件設置響應狀態碼404:如何輸出中HandleUnauthorizedRequest

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


我該怎麼辦呢?

+1

僅供參考 - 當重寫HandleUnauthorizedRequest,你真的應該設置filterContext.Result = {}的東西。到Response.End()實際上並不保證停止在MVC管道的要求,你可能會發現你的操作方法實際執行反正。 – Levi

回答

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

0

什麼: 在Web.config中創建自定義404處理器如下:

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

現在所有的404錯誤去My404ErrorPage.aspx(或任何你選擇將姓名 您的錯誤頁面),你也可以隨意重定向到它。

也許"Response.WriteError(404);

+0

不幸的是,添加'不起作用。另外,我沒有看到'Response'的WriteError方法。它是一種擴展方法嗎? –