【问题标题】:Return Unauthorized result with postsharp OnMethodBoundaryAspect使用 postsharp OnMethodBoundaryAspect 返回未经授权的结果
【发布时间】: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 操作中捕获方面返回的内容?

【问题讨论】:

    标签: asp.net-web-api postsharp


    【解决方案1】:

    如ASP.NET Web API : Correct way to return a 401/unauthorised response 所述,

    您应该从您的 API 方法中抛出 HttpResponseException

    通过设置args.ReturnValue,您正在更改由方面增强的方法的返回值,但您应该改为抛出异常。

    所以最后一行应该是

    throw new HttpResponseException(HttpStatusCode.Unauthorized);

    或者,如果您想提供自定义消息:

    var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Oops!!!" }; throw new HttpResponseException(msg);

    您也可以考虑使用MethodInterceptionAspect (http://doc.postsharp.net/method-interception),因为您没有包装方法执行,而是拦截它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多