首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpModule更改响应

HttpModule更改响应
EN

Stack Overflow用户
提问于 2012-10-26 16:51:06
回答 2查看 5.4K关注 0票数 4

在调用webservice时,我需要在调用某些操作时更改响应文本。

因此,我创建了捕获响应并对其进行更改的HttpModule。

下面的代码:

代码语言:javascript
复制
public class BeginEnd : IHttpModule
{

  public void Init(HttpApplication context)
  {
    context.EndRequest += (o, e) =>
    {       
      HttpContext currContext = HttpContext.Current;

      NameValueCollection collection = currContext.Request.QueryString;

      if ( collection.Count > 0
      && collection["op"] != null
      && collection["op"] == "ChangeService" )
      {
        string xmlOther = "<root>My Test</root>";

        currContext.Response.Clear();
        currContext.Response.Write(xmlOther);
        currContext.Response.End();
      }
    };

  }

  public void Dispose()
  {
  }
}

如你所见,我只是清除了响应对象,并把我的文本。

这是一种正确的方式吗?

它起作用了,但我想我遗漏了一些东西

你觉得呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-26 16:53:00

我不能给您一个最佳实践的答案,但是当我从一个旧的skool ASPX应用程序输出JSON时,我自己做的,它工作得很完美。

因此,我的回答是(根据个人经验):这没有错。

票数 3
EN

Stack Overflow用户

发布于 2014-05-29 21:15:03

您的方法可能会起作用,但看起来至少有一些开销与使用其默认处理程序处理请求,然后丢弃处理结果相关。

一种更好的方法可能是this answer to a different question中提出的方法,即为当前处理的请求分配不同的处理程序:

代码语言:javascript
复制
public class MyHttpModule : IHttpModule
{
    public void Init(HttpApplication application)
    {
        application.PostAuthenticateRequest += app_PostAuthenticateRequest;
    }

    void app_PostAuthenticateRequest(object sender, EventArgs e)
    {
        var context = HttpContext.Current;
        var queryString = context.Response.QueryString;

        // queryString["op"] will never fail, just compare its value
        if (queryString["op"] == "ChangeService")
        {
            context.RemapHandler(new MyHttpHandler());
        }
    }

    public void Dispose() { }
}

然后,只需将处理请求的逻辑放入MyHttpHandler类中,就可以了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13083738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档