【问题标题】:ASP.NET web services: How to execute custom code before web method invoked?ASP.NET Web 服务:如何在调用 Web 方法之前执行自定义代码?
【发布时间】:2011-03-16 07:51:31
【问题描述】:

我在一个 asmx 中有许多 webmethod。我需要在调用其中一些网络方法之前执行许可证检查。我可以在每个需要检查的 Web 方法中插入以下代码:

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

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

【问题讨论】:

    标签: asp.net web-services


    【解决方案1】:

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

    除了以上选项,你还有几个选择

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 2018-08-28
      • 2011-04-26
      • 2018-01-30
      • 1970-01-01
      相关资源
      最近更新 更多