在调用webservice时,我需要在调用某些操作时更改响应文本。
因此,我创建了捕获响应并对其进行更改的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()
{
}
}如你所见,我只是清除了响应对象,并把我的文本。
这是一种正确的方式吗?
它起作用了,但我想我遗漏了一些东西
你觉得呢?
发布于 2012-10-26 16:53:00
我不能给您一个最佳实践的答案,但是当我从一个旧的skool ASPX应用程序输出JSON时,我自己做的,它工作得很完美。
因此,我的回答是(根据个人经验):这没有错。
发布于 2014-05-29 21:15:03
您的方法可能会起作用,但看起来至少有一些开销与使用其默认处理程序处理请求,然后丢弃处理结果相关。
一种更好的方法可能是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类中,就可以了。
https://stackoverflow.com/questions/13083738
复制相似问题