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");
}
}
我需要用不同的语言发送自定义 "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");
}
}