【发布时间】:2016-07-07 23:10:18
【问题描述】:
我有一些 api 操作,包括 OnMethodBoundaryAspect 的一个方面, 我对请求中发送的令牌进行验证,就像这样。
[Serializable]
[MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)]
public class TokenCallHandler : OnMethodBoundaryAspect
{
/// <summary>
/// Methodo responsável por validar o token enviado pelo usuário
/// </summary>
/// <param name="args"></param>
public override void OnEntry(MethodExecutionArgs args)
{
ApiController apiController = (ApiController)args.Instance;
var context = apiController.ControllerContext;
HttpRequestHeaders headers = context.Request.Headers;
bool validToken = false;
if (headers.Contains("X-Authorization"))
{
var authorization = headers.GetValues("X-Authorization");
var token = authorization.ToList().FirstOrDefault();
if (token == null)
token = "invalid";
validToken = TokenUtil.ValidateToken(token);
}
if (!validToken)
args.ReturnValue = new UnauthorizedAccessException();
}
}
但是它一直在执行api中的方法,我只想返回401异常。
如果我确实抛出了新的 UnauthorizedException,它会返回 500(内部服务器错误),其中未经授权,但我需要 401。
如何在 wep.api 操作中捕获方面返回的内容?
【问题讨论】: