私のアプリケーションは、ログインを除くすべてのリクエストがWeb APIの承認属性を使用して「承認」される必要があるセットアップです。例えば。
[Authorize]
[HttpGet, Route("api/account/profile")]
public ApplicationUser Profile()
{
return userModel;
}
トークンを取得する場所であるため、ログインのみを認証する必要はありません;)
[AllowAnonymous]
[HttpPost, Route("api/account/login")]
public async Task<IHttpActionResult> Login(LoginViewModel model)
{
....
}
[Authorize]
属性をすべてのルートに追加する代わりに、グローバルに設定する方法はありますか?
2つの選択肢があります
コントローラーをauthorize属性で装飾することによるコントローラーレベル。
[Authorize]
[RoutePrefix("api/account")]
public class AccountController : ApiController
{
WebApiConfig.csファイルのRegister
メソッドで、すべてのルートにグローバルレベルを設定することもできます。
config.Filters.Add(new AuthorizeAttribute());
以下のようにAuthorizeAttribute
をWebApiConfig
ファイルに設定できます。
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Filters.Add(new AuthorizeAttribute());
}
これで、Web Apiコントローラーのすべてのメソッドに認証が必要になります。メソッドのこの承認要件を削除する場合は、ログインアクションメソッドのように属性[AllowAnonymous]
を追加する必要があります。
私はあなたが使うなら他の答えに何かを追加したかっただけです
filters.Add(container.Resolve<AuthorizeAttribute>());
必要がある場合は、属性にすべての依存関係を挿入することもできます