我一直在互聯網上試圖找出爲什麼我的自定義AuthorizeAttribute不能在我的MVC WebApi中工作。我見過的人問這種事情對SO,但沒有幫助我解決我的問題尚未:自定義AuthorizeAttribute不被MVC框架調用
[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對象?
感謝您的提前幫助,非常感謝!
基於我對我如何實現自定義授權屬性的評論...對於開始,我想你想重寫OnAuthorization,而不是AuthorizeCore。另外,我不確定你需要讓你的課程密封。 – 2013-03-20 17:53:08