2009-09-12 156 views
2

我試圖做我自己的IAuthorizationFilter屬性類。基本上,每個API調用都有一個查詢字符串參數,稱爲'鍵'。然後,我打算用簡單的授權屬性修飾任何需要此操作的操作。需要一些幫助/建議與自定義ASP.NET MVC IAuthorizationFilter類

我希望我的OnAuthorization(..)方法將提取查詢參數的值,如果它提供。如果是,並且它是合法的,那麼用戶是授權的。否則,他們不是。

我不知道如何在OnAuthorization(..)方法中執行此操作。

或者我應該使用IActionFilter而不是?

編輯:我在一些代碼加入到展示我在做什麼...

public void OnAuthorization(AuthorizationContext filterContext) 
{ 
    if (filterContext == null) 
    { 
     throw new ArgumentNullException("filterContext"); 
    } 

    ApiKey apiKey = null; 
    string queryStringKey = filterContext.HttpContext.Request.QueryString["key"]; 
    if (!string.IsNullOrEmpty(queryStringKey)) 
    { 
     apiKey = GetApiKey(queryStringKey); // Custom code that checks a dictionary. 
    } 

    // Do we have a key? 
    if (apiKey == null) 
    { 
     filterContext.Result = new HttpUnauthorizedResult(); 
    } 

    // TODO: Is this key allowed for this domain? 

    // All is good, so don't do anything else. 
} 

回答

2

你應該能夠檢查傳遞給了AuthorizationContext參數的HttpContext.Request.QueryString財產OnAuthorization方法。

要根據Key querstring值的值拒絕訪問,可以將AuthorizationContext參數的Result屬性設置爲非空值。如果需要,可以將其設置爲HttpUnauthorizedResult類的實例。

+0

我需要做什麼來說它沒有被授權? filterContext.Result = new HttpUnauthorizedResult(); 否則,保持一切爲默認值? –

+0

@ Pure.Krome:看到我的編輯到這個職位。 –

+0

因此,如果Result屬性的值非空,則它們被拒絕。這在哪裏檢查/處理? –