2016-06-22 17 views
0

我正在用C#編寫ASP.NET Web API 2.我想要的是一個全面的方法,它將爲每個請求提供給我的Web API。ASP.NET Web API--在路由方法之前爲所有請求調用的方法?

如果該方法返回null,那麼原始路由應該繼續,尋找正確的方法。但是,如果該方法返回HTTPResponseMessage,則服務器應返回該響應,而不繼續正常路由。

用例可能是處理可能影響整個API的各種場景的能力。例如:禁止單個IP地址,阻止(或白名單)某些用戶代理,處理API呼叫計數(例如,某人只能在Y分鐘內將X請求發送至任何 API方法)。

我現在想象得到的唯一方法就是在我爲我的API編寫的每個新方法中逐字地包含一個方法調用。例如,

[HttpGet] 
public HttpResponseMessage myNewMethod() 
{ 
    // I want to avoid having to do this in every single method. 
    var check = methodThatEitherReturnsResponseOrNull(Request); 
    if (check != null) return (HttpResponseMessage)check; 

    // The method returned null so we go ahead with normal processing. 
    ... 
} 

有沒有辦法在路由中實現這一點?

回答

1

這是動作過濾器的用途。這些屬性可以放置在全局,類(控制器)或方法(操作)級別。這些屬性可以在執行動作之前執行一些代碼或執行動作之後執行代碼的後處理時執行預處理。

使用預處理時,您可以選擇將結果返回給調用者,並且根本不會激發您的方法(動作)。這對於模型驗證,授權檢查等有好處。

要全局註冊過濾器,請編輯WebApiConfig.cs文件。

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Filters.Add(new YourFilterAttribute()); // add record 
     // rest of code 
    } 
} 

要創建一個自定義屬性從System.Web.Http.Filters.ActionFilterAttribute繼承,也可以實現接口System.Web.Http.Filters.IActionFilter也可以實現IAuthorizationFilter/AuthorizationFilterAttribute如果你特別希望允許/拒絕的請求。

這聽起來像是你想創建多個屬性,每個角色如IP過濾或計數調用等。這樣,它將更模塊化,而不是一個巨大的授權過濾器。

有很多教程有像this one我在谷歌搜索隨機選擇的結果)。我不會發布代碼,因爲你沒有這麼做,所以我只是猜測你想做什麼。

相關問題