是否可以从处理程序中调用另一个处理程序?我有一个自定义处理程序,只要请求文件类型就会触发,然后通过一些身份验证过程并需要调用另一个处理程序。asp.net通用处理程序调用另一个处理程序
我的问题是我不知道如何去从这个处理程序中调用其他处理程序。
很多谢谢
是否可以从处理程序中调用另一个处理程序?我有一个自定义处理程序,只要请求文件类型就会触发,然后通过一些身份验证过程并需要调用另一个处理程序。asp.net通用处理程序调用另一个处理程序
我的问题是我不知道如何去从这个处理程序中调用其他处理程序。
很多谢谢
一个Http处理程序只是一个类。你可以像任何其他类一样实例化它并调用它的ProcessRequest方法。
但是,一个更好的设计将避免处理程序到处理程序的调用,而是将通用代码移到实用程序类中并从两个处理程序中调用它。
我假设你希望处理程序调用共享一个HttpContext和请求/响应流。如果你想让第一个处理程序调用第二个处理程序,阅读它的响应,并返回它自己的响应,你可能会想用Glenn的答案来代替。
下面是调用other handler
一种方法:
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
var otherurl = "https://localhost:81/otherhandler.ashx";
// using System.Net;
var req = (HttpWebRequest)HttpWebRequest.Create(otherurl);
var sr = new StreamReader(req.GetResponse().GetResponseStream());
// read stuff: sr.ReadBlock(), sr.ReadToEnd(), ...
// do something with the response
context.Response.Write("Hello World");
}
}
根据处理程序的具体情况,您可能需要添加代码以将原始请求复制到使用HttpWebRequest对象发送的“内部”请求中,例如,如果第二个处理程序期望任何变量在表单/帖子或查询字符串中传递,或者它对任何标准http头文件有任何依赖关系,例如用户代理。 –
简短的回答是:HttpWebRequest.Create。更长的回答遵循 –