ここにの基本アイデアがあります。必要な結果を得るためには、特にコントローラー内のいくつかのアクションが許可を必要とする場合や、そうでない場合には、これを行う必要があります。 ご存知のように、asp.net mvcフレームワークのすべての部分をカスタマイズすることができます。それはそれのフィルターを提供するメカニズムです。まず、認証を提供するためのIFilterProvider実装を作成
public class AuthorizeFilterProvider : IFilterProvider
{
public List<Type> AuthorizationExcludedControllerTypes = new List<Type>();
#region IFilterProvider Members
public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
if (!AuthorizationExcludedControllerTypes.Contains(controllerContext.Controller.GetType()))
{
yield return new Filter(new AuthorizeAttribute(), FilterScope.Controller, null);
//return filter only if it is not included into AuthorizationExcludedControllerTypes list.
}
}
#endregion
}
をフィルタリングし、Global.asaxの
protected void Application_Start()
{
...
AuthorizeFilterProvider authorizeFilterProvider = new AuthorizeFilterProvider();
authorizeFilterProvider.AuthorizationExcludedControllerTypes.Add(typeof(HomeController));
FilterProviders.Providers.Add(authorizeFilterProvider);
...
}
@クリスMarisicにフィルタプロバイダを登録します。私は同意しません。リンクされた記事では、新しいAuthorize属性を作成する方法について説明します。ここでは、承認を必要としないことを指定できます。デフォルトで許可を要求する方法については説明しません。おそらく私は新しいコントローラータイプか何かが必要です。 – David
@Davidあなたはその質問に従って、それをグローバルフィルタとして適用します。それからオプトアウトするアクションにのみ属性を付けます。アクション・レベル(またはコントローラー・レベル)属性は、グローバル・アクションをオーバーライドします。 –
ああ、グローバルフィルタ?これは私が行方不明になっているMVC知識のパイの一部です::) – David