4

ASP.NET MVC 3(Razor)Webアプリケーションにエリアがある場合、すべてのコントローラーは次のようなベースコントローラーから派生します。

[Authorize(Roles="Administrator")]
public class AdminController : Controller
{

}

管理者以外のユーザーがその領域のURLにアクセスしようとすると、web.configで指定されたログインページにリダイレクトされます。

ただし、ユーザーがすでに認証されているが管理者ではない場合、これは実際には意味がありません。そのシナリオでは、HTTP 401が返されるべきではありませんか?

私の質問は、基本的に人々がこれをどのように処理するかです-彼らはカスタム承認属性を作成しますか?

4

4 に答える 4

2

このスレッドを参照してください... ASP.Netは401を302エラーコードに変換します

本当にやりたいのは403コードを返すことです。401は、認証の課題を対象としています。ASP.NETフォーム認証は401をインターセプトし、ユーザーをログインページにプッシュします。

それでも401を実行したい場合は、エンドユーザーに期待されるエクスペリエンスについて説明してください。

于 2011-04-21T05:51:42.047 に答える
1

ASP.NET MVC4 Betaを使用していますが、今日ReturnUrl、クエリ文字列にパラメーターを追加しても、フォームモジュールが応答を変更しないことに気付きました。

したがって、アクションi / Rateに属性がある[Authorize]場合、

<a href="/xm/i/Rate?pid=3&amp;count=2&amp;ReturnUrl=%2F">..</a>

401を返します。バグなのか機能なのかわかりませんが、今では説明どおりに機能します。

于 2012-05-22T07:18:23.663 に答える
0

このようなシナリオにはカスタム承認フィルター属性があり、ユーザーをカスタムエラーページに移動します

public void OnAuthorization(AuthorizationContext filterContext) {


if(//user does not have permission){

filterContext.Result = new RedirectResult("/Error/AccessDenied");

}
于 2011-04-21T04:40:09.083 に答える
0

許可されていないユーザーがAuthorize属性でマークされたメソッドにアクセスしようとすると、MVCフレームワークは401HTTPステータスコードを返します。サイトがASP.NETフォーム認証を使用するように構成されている場合、401ステータスコードにより、ブラウザーはユーザーをログインページにリダイレクトします。

参照: http://msdn.microsoft.com/zh-tw/library/system.web.mvc.authorizeattribute.aspx

他の同様の質問:ASP.NET MVCのフォーム認証から401をインターセプトする方法は?

于 2011-04-21T04:40:58.993 に答える