0

小さいが非常に厄介な問題。asp.net Web サービスで jQuery JSON 呼び出しを使用しようとしています。引数なしで Web サービスを呼び出すと、以下の HttpModule ですべて正常に動作します。クライアント側から値を送信しようとするとすぐにモジュールが実行されますが、プロセスは実際の Web サービス メソッドに渡されず、サーバー側の 500 エラーが返されます。モジュールを途中から削除すると、メソッドはパラメーターを使用して完全に正常に実行されますが、応答は JSON ではなく XML 形式で返されるため、モジュールを使用することはできません。

----------- Jquery 呼び出し ----------------------

    var dd = { 'name': 'pakistan' };

    $(document).ready(function () {
        $.getJSON("http://localhost:59271/Testing/shows-app.asmx/HelloWorld?callback=?",
        dd,                    
        function (data) {
            val = JSON.parse(data.d)
            $("#content").html(val.response);
        });
    });

------------ Httpモジュール -------------

    private const string JSON_CONTENT_TYPE = "application/json; charset=utf-8";

    public void Dispose()
    {
    }
    public void Init(HttpApplication app)
    {
        app.BeginRequest += OnBeginRequest;
        app.EndRequest += new EventHandler(OnEndRequest);
    }
    public void OnBeginRequest(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;
        HttpRequest request = app.Request;
        //Make sure we only apply to our Web Service
        if (request.Url.AbsolutePath.ToLower().Contains("-app."))
        {
            var method = app.Context.Request.Headers["REQUEST_METHOD"];

            if (string.IsNullOrEmpty(app.Context.Request.ContentType))
            {
                app.Context.Request.ContentType = JSON_CONTENT_TYPE;                    
            }

            app.Context.Response.Write(app.Context.Request.Params["callback"] + "(");

            var method2 = app.Context.Request.Headers["REQUEST_METHOD"];

        }
    }
    void OnEndRequest(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;
        HttpRequest request = app.Request;
        if (request.Url.AbsolutePath.ToLower().Contains("-app."))
        {
            app.Context.Response.Write(")");
            app.Context.Response.ContentType = "application/json";
        }
    }

- - - - - - ウェブサービス - - - - - - - - - - -

[WebMethod]
[System.Web.Script.Services.ScriptMethod(UseHttpGet = true, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
public string HelloWorld(string name)
{
    var json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(new
    {
        response = "Pakistan " + " Zindabad"
    });

    return json;

    //string jsoncallback = HttpContext.Current.Request["callback"];
    //return string.Format("{0}({1})", jsoncallback, json);
}

モジュールを途中から削除すると、メソッドはパラメーターを使用して完全に正常に実行されますが、応答は JSON ではなく XML 形式で返されるため、モジュールを使用することはできません。

事前にたくさんありがとう。

4

0 に答える 0