ASP.NET Web服务:如何在调用Web方法之前执行自定义代码?

时间:2011-03-16 07:51:31

标签: asp.net web-services

我在一个asmx中有很多web方法。我需要在调用某些webmethods之前执行许可证检查。我可以将以下代码插入到需要检查的每个Web方法中:

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

或者我可以将复杂的过滤器插入到HttpModule中以通过URL检测webmethod。 我需要像webmethod属性和我可以处理它的地方。 有没有很好的解决方案?

1 个答案:

答案 0 :(得分:1)

IMO,这两个选项都很好。使用HttpModule是一种很好的方法 - 通过解析url检测Web服务调用非常简单 - 简而言之,您正在寻找特定的asmx(以及处理WSDL请求)。如果要进行选择性许可检查,请在URL中执行简单的方法名称嗅探(而不是使用属性装饰方法)。

除上述选项外,您还有几种选择

  1. 使用一些Aspect Oriented Programming框架(例如,PostSharp)通过使用属性来装饰方法来注入许可证检查代码。

  2. 在处理程序级别执行此操作。实质上,实现IHttpHandlerFactory并将其用于asmx端点。实现将在{ajax情况下“包装WebServiceHandlerFactory(或ScriptHandlerFactory)并返回一个处理器,该处理程序包装底层处理程序提供的处理程序对象。但坦率地说,这是一个脆弱的解决方案,与HttpModule基本相同,但更复杂。