【问题标题】:HttpModule Change ResponseHttpModule 更改响应
【发布时间】:2012-10-16 12:44:32
【问题描述】:

在调用网络服务时,我需要在调用某些操作时更改响应文本。

因此我创建了 HttpModule 来捕获响应并更改它。

代码下方:

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()
  {
  }
}

如您所见,我只是清除 Response 对象并输入我的文本。

这是一种正确的方法吗?

它正在工作,但我认为我错过了一些东西

你怎么看?

【问题讨论】:

    标签: c# asp.net http response


    【解决方案1】:

    我无法为您提供最佳实践答案,但是当我从老式 ASPX 应用程序输出 JSON 时,我自己会这样做,并且它可以完美运行。

    所以我的回答是(出于个人经验):这没什么问题。

    【讨论】:

      【解决方案2】:

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

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

      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 类中即可。

      【讨论】:

        猜你喜欢
        • 2010-11-25
        • 1970-01-01
        • 1970-01-01
        • 2015-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-23
        相关资源
        最近更新 更多