我爲我的API創建了認證過濾器,它將驗證auth頭以確保用戶可以訪問該API。但是,我也有權限設置端點,這將允許用戶閱讀,但不能寫等我希望能夠在這裏執行此身份驗證,如果它失敗,我可以殺死請求。爲此,我需要知道控制器和操作值。我有權訪問url字符串,但我不願意自己解析這個,除非我必須。從ASP.NET API中的認證過濾器訪問路由信息
我已經使用從AuthenticateAsync方法
var requestcontext = context.Request.GetRequestContext();
string actionName = requestcontext.RouteData.Values["action"].ToString();
string controllerName = requestcontext.RouteData.Values["controller"].ToString();
這將返回一個問題,因爲控制器和操作鍵都沒有設置這時裏面下面的代碼嘗試。有沒有辦法強制他們設置?意思是說,我可以調用的方法是強制.NET立即設置路由數據,而不是稍後,允許我訪問值?
如果這是不可能的。我怎麼能夠實現這個目標?我試圖創建一個基本的APIController,在這裏我嘗試添加以下內容。
protected override void OnAuthorization(AuthorizationContext filterContext)
{
//check the route data and validate
}
由於APIController不支持此方法,因此無法正常工作。假設它是MVC控制器的一部分,而不是API。我嘗試過使用MVC的各種其他覆蓋,但它們不適用於API控制器。我寧願能夠在過濾器中處理所有這些,所以我不需要使用控制器,但是如果這是實現它的唯一方法,那麼它是如何完成的?
我有同樣的問題,你可以找到我的問題的一些答案:http://stackoverflow.com/questions/18248547/get-controller-and-action-name-from-within-controller – Robert