ASP.NET MVC 2 プロジェクトに取り組んでいます。ユーザーが何らかのアクションを表示する権限を持っていない場合に発生する不正アクセスの例外をキャッチするための例外フィルターを作成します。
[CustomError(typeof(UnauthorizedAccessException), "Error", "UnauthorizedAccess")]
public class MyController : BaseController
{
}
例外がスローされた後、フィルターは次のメソッドである構成済みのコントローラー/アクションに転送されます。
public ActionResult UnauthorizedAccess(ExceptionContext context)
{
Response.StatusCode = CustomHttpStatusCode.UnauthorizedUser;
return View(model);
}
最後に、ASP.NET アプリケーションがこの要求を終了する前に、Global.ascx にある次のメソッドを呼び出して、カスタム HTTP ステータス コードを HTTP ステータス 401 (不正アクセス) に変更します。
public void Application_EndRequest(object sender, EventArgs e)
{
if (Response.StatusCode == CustomHttpStatusCode.UnauthorizedUser)
{
Response.StatusCode = 401;
}
}
私のマシン(IIS 7.5)ではすべて正常に動作しています。しかし、デプロイ Web サイトでは機能しません。それでも、「このディレクトリまたはページを表示する権限がありません」というプレーン テキストが返されます。カスタム エラー ページの代わりに。
PS。次の構成は、この場合の現在の web.config です。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<customErrors mode="On"></customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="502" subStatusCode="-1" />
<remove statusCode="501" subStatusCode="-1" />
<remove statusCode="500" subStatusCode="-1" />
<remove statusCode="412" subStatusCode="-1" />
<remove statusCode="406" subStatusCode="-1" />
<remove statusCode="405" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="403" subStatusCode="-1" />
<remove statusCode="401" subStatusCode="-1" />
</httpErrors>
</system.webServer>
</configuration>