从 jQuery ASP.NET Web 服务的跨域 GET 请求失败



我试图理解从jQuery ajax对Web服务的跨域调用。我在一个项目中运行了一个 Web 服务,在另一个项目中运行了一个简单的 ASP.NET Web 应用程序。

网络服务代码 -

    [WebMethod]
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
    public string HelloWorld()
    {
        string json = "Hello World";
        string jsoncallback = HttpContext.Current.Request["callback"];
        if (string.IsNullOrWhiteSpace(jsoncallback))
        {
            return json;
        }
        else
        {
            return string.Format("{0}({1})", jsoncallback, json);
        }
    }

从页面调用 Web 服务 -

    $(function () {
        $("#btnCall").click(function () {
            var urlToCall = "http://localhost:55172/SampleWebService.asmx/HelloWorld";
            $.ajax({
                url: urlToCall,
                type: "GET",
                dataType: "jsonp",
                contentType: "application/javascript",
                jsonpCallback: "MyFunc",
                error: function () {
                    console.log("Error!");
                },
                success: function () {
                    console.log("Success!!");
                }
            });
            return false;
        });
        function MyFunc() {
            console.log("Callback fired!");
        }
    });

如您所见,我正在通过单击按钮调用网络服务。但是这个电话失败了,说,

Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
Exception Details: System.InvalidOperationException: Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.

如果我将以下内容添加到我的 web.config 中,则会纠正此问题 -

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

但是,如果我这样做,无论我做什么,我的数据总是以XML格式返回。我需要有效 JSON 格式的数据,我该怎么办?

另请注意,我可以从同一项目中的 aspx 页面调用此 Web 服务,这似乎工作正常。

需要使用自定义代码序列化服务输出。这些链接可以帮助您:

  • http://www.codeproject.com/Articles/43038/Accessing-Remote-ASP-NET-Web-Services-Using-JSONP
  • JSONP 和 ASMX Web Service

相关内容

  • 没有找到相关文章

最新更新