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」は、 my custom でマークされた別のアクションを含むコントローラーのアクションですAuthorizeAttribute

于 2011-01-24T20:38:40.370 に答える