0

一个小但非常烦人的问题。我正在尝试将 jQuery JSON 调用与 asp.net Web 服务一起使用。如果我在没有任何参数的情况下调用 Web 服务,那么下面的 HttpModule 一切正常。一旦我尝试从客户端发送一个值,Module 就会被执行,但该过程不会传递给实际的 webservice 方法并返回服务器端 500 错误。如果我们从中间移除模块,那么该方法可以通过参数完美执行,但是响应以 XML 格式而不是 JSON 格式返回,因此我们无法使用模块。

------------ 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);
        });
    });

------------ HttpModule -------------

    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);
}

请记住,如果我们从中间删除模块,那么该方法会通过参数很好地执行,但是响应会以 XML 格式而不是 JSON 格式返回,因此我们无法使用模块。

提前感谢一堆。

4

0 回答 0