【问题标题】:How to intercept and change httprequests with c#如何使用c#拦截和更改httprequests
【发布时间】:2012-05-16 05:55:38
【问题描述】:

我正在使用 c# 开发一个 web 服务。可以使用过滤器(使用 HttpModule)拦截客户端请求。但是如何修改请求。我可以像这样获取请求

 Stream InputStrm = App.Context.Request.InputStream;

我想解密请求并将其重新设置。我该怎么做??

【问题讨论】:

    标签: c# .net web-services httpmodule


    【解决方案1】:

    这取决于您使用的网络服务技术。如果您使用 Web API 或 MVC,则使用 ActionFilter。如果您使用 asmx,则使用 SoapExtension。如果您使用 WCF,则有各种扩展点。如果它只是一个网络请求,HttpModule 可以通过说HttpContext.Current.Response.Filter = new SomeFilter( HttpContext.Current.Response.Filter ) 来应用过滤器,其中SomeFilter 是类似public class SomeFilter : Stream { 的类。 Request.Filter 应该以相同的方式工作。 http://www.15seconds.com/issue/020417.htm 是一篇旧文章,但稍微介绍了这些 Response.Filter 类。

    【讨论】:

    • 我正在使用 asmx。使用 SoapExtension 是可能的。在过滤器中,我解密了检查标头和身份验证的请求。如果我们使用soapExtension,我们必须在 webmethod 上方指定解密属性。所以解密发生了两次(在过滤器和WebService方法中)。我想避免这种情况。如果我能够修改过滤器中的请求,解密只会发生一次
    • 然后在soap扩展中解密,将解密后的值写入传入方法的流中。在方法里面,你可以假设内容已经被解密了。
    • 其实是用soaping扩展,直接调用DecryptSoap()函数。它会返回一个内存流。它不会修改请求。我这样做只是为了处理请求。我们不能放像我们在 webmethod 中所做的相应过滤方法上方的解密属性。目前我正在这样做 ..EncryptionExtension ObjCrypto = new EncryptionExtension();MemoryStream MemStrm = ObjCrypto.DecryptSoap(InputStrm);
    • msdn.microsoft.com/en-us/library/esw638yk(v=vs.71).aspx 向下滚动到public override Stream ChainStream( Stream stream ){
    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 2023-03-28
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2011-11-14
    相关资源
    最近更新 更多