Asp.net
從 MVC 4 項目授權 ASMX .NET Web 服務的正確方法
我有一個具有 .asmx Web 服務的ASP.NET MVC應用程序
我編寫了一個操作過濾器屬性,我想在 Web 服務上的 Web 方法上使用它,以檢查使用者 ID 和密碼的請求標頭,並在無效或不存在時拋出未經授權的響應程式碼。
但是,他們似乎沒有被呼叫!斷點只是不被擊中。
首先,使用MVC屬性是一種可接受的授權在**ASMX Web 服務上呼叫的Web 服務的方式嗎?
其次,是否有更好/更有效的方式來授權 Web 服務方法呼叫?
在回答您的第一個問題時,ASMX Web 服務****無法觸發MVC過濾器和Web API過濾器。
- 動作過濾器是MVC管道的一部分,在控制器(或 API 控制器)上的動作方法執行之前(或之後)觸發。它們只能在MVC框架內使用。
動作過濾器覆蓋MVC控制器 (
OnActionExecuting) 上的虛擬方法。因為只有MVC控制器有這樣的方法,並且只有MVC管道檢查它們 2. 更糟糕的是,ASMX服務預設使用SOAP協議而不是HTTP協議。SOAP服務無法訪問 HTTP 上下文(例如HttpContext.Current.User)或HTTP框架。Web 服務可以配置為使用HTTP 協議。但是,即便如此,MVC特定屬性對您也沒有幫助。
驗證傳統ASMX服務的方法
- 理想的方法是向您的MVC 4項目添加服務引用,像從安全的操作方法或Web API方法中呼叫任何類庫方法一樣呼叫您的ASMX方法。
[Authorize]這樣,您可以利用MVC或Web API身份驗證過濾器。
- 如果您更喜歡直接保護您的ASMX服務,您可以通過將ASMX服務配置為使用HTTP協議來檢查
HttpContext.Current.User表單身份驗證。在你的 web.config
<location path="SecuredMethod.asmx"> <system.web> <webServices> <protocols> <add name="HttpGet"/> <add name="HttpPost"/> </protocols> </webServices> </system.web> </location>