web-dev-qa-db-ja.com

.csファイルasp.netからHttpHandlerを呼び出す方法

Jqueryajax呼び出しから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( "")によって呼び出すことができることを私は知っています。また、ページメソッドのスクリプトを登録します。
しかし、c#を使用してハンドラーにリクエストを送信し、ハンドラーから応答を返す方法はありますか。

ありがとう。

8
शेखर

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を取得できます

詳しくは

20
dknaack

私はこれを行う別の方法を見つけました。同じプロジェクトからアクセスしたい場合は、とても簡単です。

コードビハインドで使用する手順

  1. 基本的には、クラス名でクラスを作成します。
  2. そのクラスのオブジェクトを作成できます。
  3. 次に、ProcessRequestを呼び出すことができます。
  4. そのハンドラーを実行します。

次のようにハンドラーを作成したとします。

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の詳細 [ 12 ]

編集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;
        }
    }
}
4
शेखर