HTTP 401を返すのではなく、必要なメッセージを含むWebページと、ログインページに移動するためのボタンを返します。
実際には、不正な応答を送信していると思いますが、実際には、ASP.NETはそのHTTP 401応答をインターセプトし、代わりにHTTP 302(リダイレクト)をログインページに送信しています。したがって、カスタムメッセージが必要な場合は、目的のページにリダイレクトするだけです。
乾杯。
アップデート:
独自の承認フィルターを作成する場合、ユーザーが承認/認証されていない場合に何が起こるかを定義できます。
public class MyAuthorizeAttribute : AuthorizeAttribute
{
readonly String _customError;
public MyAuthorizeAttribute(String customError)
{
_customError = customError;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
FormsAuthentication.SignOut();
filterContext.Controller.TempData["Error"] = _customError;
filterContext.Result = new RedirectResult("~/Account/yourErrorView");
}
}
(未検証)
このようにして、属性を次のように使用できます。
[MyAuthorize("You are not authorized to see this thing")]
public ActionResult MyActionMethod()
{
return View();
}
次に、ユーザーは「〜/ Account / yourErrorView」にリダイレクトされ、TempDataにカスタムエラーメッセージが表示されます。
乾杯。