[英]Large WCF web service request failing with (400) HTTP Bad Request
[英]HTTP 400 Bad Request - CORS enabled WCF Service
我正在尝试在 WCF 上使用 CORS 对服务进行跨域调用。 我有大部分工作,但是当我尝试调用该函数时,它总是给我一个错误 - HTTP 400 Bad Request
我用 Fiddler 来捕获错误,它说的是这样的
当我试图寻找解决方案时,我看到有人建议使用BodyStyle=WebMessageBodyStyle.Bare
。 我试过了,但服务给出了错误,因为我有多个参数。
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle=WebMessageBodyStyle.Wrapped,
RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json,
UriTemplate = "/GetData")]
//[WebGet(BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/GetData/{value}/")]
string GetData(string value, string val2);
我不知道如何解决这个问题。 任何帮助将不胜感激。
如果您需要查看更多内容,例如我的配置,请告诉我,我可以分享。
服务电话:
var datav = "{value : 4, val2 : 5}";
var datasent = JSON.stringify(datav);
$.ajax({
type: "POST",
dataType: 'json',
contentType: "application/json",
data: datasent,
url: pURL,
success: function (data) {
alert('success');
},
error: function(xhr, status, error) {
alert(xhr.responseText);
}
});
首先,如果您的 Service 只是返回数据,则不建议使用POST 。 请改用GET 。 但是,如果您打算使用POST ,那么这里是在 WCF 中使用它的正确方法。
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle=WebMessageBodyStyle.Bare,
RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json,
UriTemplate = "/GetData")]
string GetData(MyValues values);
这是您的MyValues
课程。
[DataContract]
public class MyValues
{
[DataMember]
public string value1{get; set;}
[DataMember]
public string value2{get; set;}
public override string ToString()
{
JavaScriptSerializer js = new JavaScriptSerializer(); // Available in System.Web.Script.Serialization;
return js.Serialize(this);
}
}
请注意,我在MyValues
类中编写了ToString()
方法。 这是因为您可以获得将从 JSON 调用发送的 JSON 格式。 更多细节在这里。
从 AJAX 调用时,您还需要指定charset
。
contentType: "application/json; charset=utf-8",
现在检查! 确保您在请求中发送正确的 JSON。 ToString()
方法将返回您的服务将接受的所需 JSON 格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.