我一直在互联网上试图找出为什么我的自定义 AuthorizeAttribute 在我的 MVC WebApi 中不起作用。我见过有人在 SO 上询问这种事情,但没有什么能帮助我解决我的问题:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false,
Inherited = false)]
public sealed class CustomAuthorization : AuthorizeAttribute
{
//...
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// custom auth logic, returns true if authorized, false otherwise
}
}
我System.Web.Mvc
从而不是扩展System.Web.Http
。但是,我AuthorizeCore(HttpContextBase httpContext)
的从未被调用。
我的CustomAuthorization
类中有一个构造函数,它接受params string[]
一个特定操作所需的自定义权限的名称,例如:
[CustomAuthorization("Some Permission")]
[System.Web.Http.HttpGet]
public CustomResponse SomeAction()
{
//...
}
我希望实现的是,每当对使用该[CustomAuthorization]
属性装饰的操作发出请求时,都会触发我的授权代码。如果授权失败,我还希望能够返回更具描述性的身份验证失败消息。不只是:
{"Message":"Authorization has been denied for this request."}
我相信这涉及到覆盖HandleUnauthorizedRequest
,但我怎样才能提供我自己的 JSON 响应将序列化的对象?
总而言之,即使我用我的[CustomAuthorization]
属性装饰动作,框架也不会调用我的授权代码。它只是直接执行动作中的代码。
其次,如何实现未经授权的响应来序列化自定义 JSON 对象?
提前感谢您的帮助,非常感谢!