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

शेख*_*ेखर 8 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();
    }
});
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

dkn*_*ack 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();
Run Code Online (Sandbox Code Playgroud)

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

更多信息


शेख*_*ेखर 5

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

在后面的代码中使用它的步骤

  1. 基本上它创建一个具有类名的类。
  2. 您可以创建该类的对象。
  3. 然后就可以调用了ProcessRequest。
  4. 它将执行该处理程序。

假设我创建了一个处理程序如下

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

所以你可以使用它如下

HandlerName obj=new HandlerName();
obj.ProcessRequest(HttpContext);
Run Code Online (Sandbox Code Playgroud)

请注意,您可以获取当前上下文,并且需要在流程请求中传递它。更多关于 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

HttpContext.Current.Items["ModuleInfo"] = "Custom Module Info"
Run Code Online (Sandbox Code Playgroud)

并在ProcessRequest方法中按照以下方式获取它

public class HandlerName : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
      string contextData = (string)(HttpContext.Current.Items["ModuleInfo"]);
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)