2011-03-16 70 views
0

我在一個asmx中有很多webmethods。我需要在調用一些webmethods之前執行許可證檢查。我可以插入下面的代碼,需要檢查每個Web方法:ASP.NET Web服務:如何在調用Web方法之前執行自定義代碼?

if (!AllRight()) 
{ 
    // badRequest 
    return; 
} 

或者,我可以將複雜的過濾器,以通過的HttpModule URL檢測的webmethod。 我需要類似webmethod的屬性和我可以處理它的地方。 有很不錯的解決方案嗎?

回答

1

IMO,這兩個選項都不錯。使用HttpModule是一個好方法 - 通過解析url檢測Web服務調用非常簡單 - 簡而言之,您正在尋找特定的asmx(並處理WSDL請求)。如果你想做選擇性許可檢查,那麼在URL中做簡單的方法名稱嗅探(而不是使用屬性裝飾方法)。

除上述選項,你有幾個選擇

  1. 的使用了一些Aspect Oriented Programming框架(例如,PostSharp)注入許可使用屬性裝飾方法檢查代碼。

  2. 在處理程序級別執行此操作。實質上,實現一個IHttpHandlerFactory並將其用於您的asmx端點。該實現將包裝爲WebServiceHandlerFactory(或者在ajax情況下爲ScriptHandlerFactory),並且將返回一個包裝由底層處理程序提供的處理程序對象的處理程序。但坦率地說,這是一個脆弱的解決方案,與HttpModule基本相同,但更復雜。