我在一个asmx中有很多web方法。我需要在调用某些webmethods之前执行许可证检查。我可以将以下代码插入到需要检查的每个Web方法中:
if (!AllRight())
{
// badRequest
return;
}
或者我可以将复杂的过滤器插入到HttpModule中以通过URL检测webmethod。 我需要像webmethod属性和我可以处理它的地方。 有没有很好的解决方案?
答案 0 :(得分:1)
IMO,这两个选项都很好。使用HttpModule是一种很好的方法 - 通过解析url检测Web服务调用非常简单 - 简而言之,您正在寻找特定的asmx(以及处理WSDL请求)。如果要进行选择性许可检查,请在URL中执行简单的方法名称嗅探(而不是使用属性装饰方法)。
除上述选项外,您还有几种选择
使用一些Aspect Oriented Programming框架(例如,PostSharp)通过使用属性来装饰方法来注入许可证检查代码。
在处理程序级别执行此操作。实质上,实现IHttpHandlerFactory并将其用于asmx端点。实现将在{ajax情况下“包装WebServiceHandlerFactory
(或ScriptHandlerFactory
)并返回一个处理器,该处理程序包装底层处理程序提供的处理程序对象。但坦率地说,这是一个脆弱的解决方案,与HttpModule基本相同,但更复杂。