8

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# を使用してハンドラーから応答を返す方法はありますか?

ありがとう。

4

2 に答える 2

22

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

詳しくは

于 2012-07-18T06:56:38.140 に答える
5

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

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

  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 の詳細[ 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;
        }
    }
}
于 2014-06-04T04:57:03.627 に答える