Asp.net

從 MVC 4 項目授權 ASMX .NET Web 服務的正確方法

  • March 30, 2016

我有一個具有 .asmx Web 服務的ASP.NET MVC應用程序

我編寫了一個操作過濾器屬性,我想在 Web 服務上的 Web 方法上使用它,以檢查使用者 ID 和密碼的請求標頭,並在無效或不存在時拋出未經授權的響應程式碼。

但是,他們似乎沒有被呼叫!斷點只是不被擊中。

首先,使用MVC屬性是一種可接受的授權在**ASMX Web 服務上呼叫的Web 服務的方式嗎?

其次,是否有更好/更有效的方式來授權 Web 服務方法呼叫?

在回答您的第一個問題時,ASMX Web 服務****無法觸發MVC過濾器和Web API過濾器。

  1. 動作過濾器是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]

這樣,您可以利用MVCWeb 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> 

引用自:https://stackoverflow.com/questions/35847074