Jim*_*mbo 10 asp.net asp.net-mvc web-services asmx asp.net-mvc-4
我有一个ASP.NET MVC应用程序,它具有.asmx Web服务
我编写了一个动作过滤器属性,我想在Web服务上的Web方法上使用,检查UserID和Password的Request标头,如果无效或不存在则抛出未经授权的响应代码.
但是,他们似乎没有被召唤!断点不会受到打击.
首先,使用MVC属性是一种可接受的方式来授权在ASMX Web服务上调用的Web服务吗?
其次,是否有更好/更有效的方式来授权Web服务方法调用?
在回答您的第一个问题时,ASMX Web服务无法触发MVC过滤器和Web API过滤器.
操作过滤器是MVC管道的一部分,在执行控制器(或API控制器)上的操作方法之前(或之后)触发.它们只能在MVC框架中使用.
Action Filter覆盖MVC Controller(OnActionExecuting)上的虚方法.由于只有MVC控制器具有此类方法,并且只有MVC管道检查它们
更糟糕的是,ASMX服务默认使用SOAP协议而不是HTTP协议.SOAP服务无法访问HTTP上下文(例如HttpContext.Current.User)或HTTP框架.
可以将Web服务配置为使用HTTP协议.但是,即便如此,MVC的特定属性也无济于事.
验证传统ASMX服务的方法
理想的方法是向MVC 4项目添加服务引用,从安全的Action Method或Web API方法调用ASMX方法,就像任何类库方法一样.[Authorize]
这样,您就可以利用MVC或Web API身份验证过滤器.
如果您希望直接保护ASMX服务,可以HttpContext.Current.User通过将ASMX服务配置为使用HTTP协议来检查表单身份验证.
在你的web.config中
<location path="SecuredMethod.asmx">
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8502 次 |
| 最近记录: |