C# C授权属性逻辑

C# C授权属性逻辑,c#,asp.net-mvc,asp.net-web-api,C#,Asp.net Mvc,Asp.net Web Api,我正在尝试在WebApi控制器中实现Authorize属性。我已经找到了关于如何实现授权的参考资料,甚至在实现授权时我需要设置线程和HttpContext主体。但我找不到如何/在何处编写授权逻辑的示例 public class MyController : ApiController { [Route("")] [Authorize] public async Task<IHttpActionResult> Get() {} } public class My

我正在尝试在WebApi控制器中实现Authorize属性。我已经找到了关于如何实现授权的参考资料,甚至在实现授权时我需要设置线程和HttpContext主体。但我找不到如何/在何处编写授权逻辑的示例

public class MyController : ApiController
{
    [Route("")]
    [Authorize]
    public async Task<IHttpActionResult> Get() {}
}
public class MyAuthorizationProvider
{
    public void AuthorizeIGuess()
    {
        string authHeader = HttpContext.Request.Headers.GetValues("Authorization").FirstOrDefault();

        // do stuff with auth header
        // create principal

        HttpContext.Current.User = ...;
        Thread.CurrentPrincipal = ...;
    }
}
我如何设置MyAuthorizationProvider以便用于授权,这就是我设置身份验证上下文的方式吗?

您需要继承AuthorizationAttribute,如

并使用此覆盖授权属性,如

    public class MyController : ApiController
  {
    [Route("")]
    [MyAuthorizationProvider]
    public async Task<IHttpActionResult> Get() {}
  }
当您继承AuthorizeAttribute时,它将为您提供一些重写方法,以更好地实现您的逻辑,也可以使用它。有关更多详细信息。

在使用简单[Authorize]的示例中,这些只是抽象示例吗?是否可以重复使用[Authorize]属性,或者是否始终扩展/重命名该属性?
    public class MyController : ApiController
  {
    [Route("")]
    [MyAuthorizationProvider]
    public async Task<IHttpActionResult> Get() {}
  }