如何从.cs文件asp.net调用HttpHandler

时间:2012-07-18 06:50:21

标签: c# asp.net httphandler

我已经为我的Jquery ajax调用创建了一个http处理程序。 jquery调用正常工作如下所述

 $.ajax({
    url: "Services/name.ashx",
    contentType: "text/plain",
    data: {
        CustMobile: a,
        CustName: b,
        CustEmail: c
    },
    contentType: "application/json; charset=utf-8",
    success: function (data) {
        $("#loading").hide();
    },
    error: function () {
        $("#loading").hide();
    }
});

现在我的问题是我可以通过后面的代码调用name.ashx处理程序。我在使用带有C#的asp.net。我知道可以通过Response.write(“”)编写整个脚本部分来调用它。 Ans还注册页面脚本方法。
但有没有办法可以使用c#向处理程序发送请求并从处理程序返回响应。

感谢。

2 个答案:

答案 0 :(得分:20)

您可以使用HttpWebRequest(System.Net命名空间)

从后面的代码中调用任何http资源

示例

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("<YourDomain>/Services/name.ashx?CustMobile=ValueOfA&CustName=ValueOfB&CustEmail=ValueOfC");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

您需要一个绝对路径,但如果您不想对域进行硬编码,则可以从HttpContext获取域名或服务器URL

更多信息

答案 1 :(得分:4)

我找到了另一种方法。如果你想从同一个项目访问它,这很容易。

在代码隐藏

中使用它的步骤
  1. 基本上它会创建一个带有类名的类。
  2. 您可以创建该类的对象。
  3. 然后你可以致电ProcessRequest
  4. 它将执行该处理程序。
  5. 假设我创建了一个处理程序,如下所示

    public class HandlerName : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
           //some code
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
    

    所以你可以按照以下方式使用它

    HandlerName obj=new HandlerName();
    obj.ProcessRequest(HttpContext);
    

    请注意,您可以获取当前上下文,并且需要在流程请求中传递它。 更多关于HttpContext [1 2]

    编辑1

    如果您需要这样做,也可以重载ProcessRequest方法。

    public class HandlerName : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
          // some code
        }
        public void ProcessRequest(HttpContext context, string someString)
        {
           // do your coding here
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
    

    如果您不想覆盖该方法,可以按以下方式传递值
    您可以在HttpContext.Current.Items

    中添加值
    HttpContext.Current.Items["ModuleInfo"] = "Custom Module Info"
    

    并按照ProcessRequest方法

    中的说明进行操作
    public class HandlerName : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
          string contextData = (string)(HttpContext.Current.Items["ModuleInfo"]);
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }