401 上的自定义 [Authorize] 消息

Custom [Authorize] message on 401

我需要用不同的语言发送自定义 "not authorized" 消息,而不是默认的 "Authorization has been denied for this request"。我使用 Owin 作为身份验证和 ApiControllers/methods 的 [Authorize] 属性。我知道这可以通过自定义自动化过滤器来完成,但是仅仅更改发送给客户端的消息似乎是一种矫枉过正的情况。

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

谢谢

很遗憾,这是不可能的。

基于 source code,一种选择是创建一个新的自定义授权属性,继承自 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");
      }
    }