不允许使用JSONP WCF方法

本文关键字:WCF 方法 JSONP 不允许 | 更新日期: 2023-09-27 18:08:39

我在下面定义了我的WCF联系人

   [OperationContract]
    [WebInvoke(Method = "POST",
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "GetUrlContent"
         )]
    List<string> GetUrlContent(List<string> urls);
}

我有

<binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />

我的JS是这样的

    var Url = "http://192.168.1.100/WebContent.svc/GetUrlContent?callback=?";
var postdata= [];
postdata.push("http://cnn.com");
postdata.push("http://bbc.com");
    $.getJSON(Url , JSON.stringify(postdata), function (msg) {
        for (i in msg) {
            console.log(msg[i]);
        }
    });

Err Msg i Get is

"NetworkError: 405 Method Not Allowed "http://192.168.1.100/WebContent.svc/GetUrlContent?callback=jQuery183043170534494375234_1365725164391& [% 22 http://cnn.com % 22, % 22 http://bbc.com % 22], _ = 1365725173310 "

编辑这是我新的错误信息

 Exception type: InvalidOperationException 
    Exception message: Operation 'GetUrlContent' in contract 'IFetchWebContent' uses GET, but also has body parameter 'urls'. GET operations cannot have a body. Either make the parameter 'urls' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
   at System.ServiceModel.Description.WebHttpBehavior.ValidateGETHasNoBody(OperationDescription operation, String method)
   at System.ServiceModel.Description.WebHttpBehavior.<>c__DisplayClass10.<>c__DisplayClass13.<GetRequestDispatchFormatter>b__d()

不允许使用JSONP WCF方法

WCF的内置JSONP支持仅限于GET请求;你就不能做POST

尝试将您的方法更改为GET:

[OperationContract]
[WebInvoke(Method = "GET",
    ResponseFormat = WebMessageFormat.Json,
    RequestFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Wrapped,
    UriTemplate = "GetUrlContent")]
List<string> GetUrlContent(List<string> urls);