【发布时间】:2019-03-29 22:41:56
【问题描述】:
我们有一个自定义 AuthorizationFilterAttribute 用于装饰 WebApi 控制器操作,该操作采用枚举参数来定义访问级别。
public enum AuthLevel
{
Any = 1,
Client = 2,
Server = 4
}
[AttributeUsage(AttributeTargets.Method)]
public class CustomAuthorizeAttribute : AuthorizationFilterAttribute
{
private readonly AuthLevel _authLevel;
public CustomAuthorizeAttribute(AuthLevel authLevel)
{
_authLevel = authLevel;
}
public override void OnAuthorization(HttpActionContext actionContext)
{
...
}
}
用法:
public class TestController : ApiController
{
[HttpGet, Route("api/test")]
[CustomAuthorizeAttribute(AuthLevel.Client)]
public IHttpActionResult Get()
{
return Ok();
}
[HttpGet, Route("api/testasync")]
[CustomAuthorizeAttribute(AuthLevel.Server)]
public async Task<IHttpActionResult> GetAsync()
{
return Task.FromResult(Ok());
}
}
虽然良好的集成测试无法替代,但我希望能够对控制器操作上已使用正确枚举值定义的此属性进行单元测试。它还必须同时使用标准方法和异步方法。
【问题讨论】:
标签: c# asp.net-web-api authorization