我的 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]);
}
});
我收到的错误消息是
"NetworkError: 405 Method Not Allowed - http://192.168.1.100/WebContent.svc/GetUrlContent?callback=jQuery183043170534494375234_1365725164391&[%22http://cnn.com%22,%22http://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()
最佳答案
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);
关于c# - 不允许 JSONP WCF 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15961044/