我需要以不同的语言传递自定义的“未经授权”消息,而不是默认的“对此请求已拒绝授权”。我将Owin用作身份验证,并将ApiControllers /方法的[Authorize]属性使用。我知道可以使用自定义自动过滤器来完成此操作,但是仅更改发送给客户端的消息似乎就显得过头了。

有没有更简单的方法来更改消息,还是应该坚持使用自定义授权过滤器?

谢谢

最佳答案

不幸的是,这是不可能的。

基于source code,一种选择是创建一个新的自定义Authorize属性,该属性继承自AuthorizeAttribute。然后,您只需要覆盖HandleUnauthorizedRequest方法,并用自己的方法替换即可。其余方法仍将由基本AuthorizeAttribute处理

  public class MyCustomAuthAttribute : AuthorizeAttribute
  {
      protected virtual void HandleUnauthorizedRequest(HttpActionContext actionContext)
        {
            if (actionContext == null)
            {
                throw Error.ArgumentNull("actionContext");
            }

                actionContext.Response =
                actionContext.ControllerContext.Request.CreateErrorResponse(
                                      HttpStatusCode.Unauthorized,
                                      "My Un-Authorized Message");
      }
    }

10-08 15:16