2015-05-29 110 views
1

是否可以从处理程序中调用另一个处理程序?我有一个自定义处理程序,只要请求文件类型就会触发,然后通过一些身份验证过程并需要调用另一个处理程序。asp.net通用处理程序调用另一个处理程序

我的问题是我不知道如何去从这个处理程序中调用其他处理程序。

很多谢谢

+0

简短的回答是:HttpWebRequest.Create。更长的回答遵循 –

回答

3

一个Http处理程序只是一个类。你可以像任何其他类一样实例化它并调用它的ProcessRequest方法。

但是,一个更好的设计将避免处理程序到处理程序的调用,而是将通用代码移到实用程序类中并从两个处理程序中调用它。

我假设你希望处理程序调用共享一个HttpContext和请求/响应流。如果你想让第一个处理程序调用第二个处理程序,阅读它的响应,并返回它自己的响应,你可能会想用Glenn的答案来代替。

0

下面是调用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"); 

    } 
} 
+0

根据处理程序的具体情况,您可能需要添加代码以将原始请求复制到使用HttpWebRequest对象发送的“内部”请求中,例如,如果第二个处理程序期望任何变量在表单/帖子或查询字符串中传递,或者它对任何标准http头文件有任何依赖关系,例如用户代理。 –

相关问题