HTTP 400错误请求 - 启用CORS的WCF服务

时间:2014-03-21 13:48:21

标签: c# wcf cors webinvoke

我正在尝试在WCF上使用CORS来对服务进行跨域调用。我有大部分工作,但当我尝试调用该函数时,它总是给我一个错误 - HTTP 400 Bad Request

我用Fiddler捕获错误,它说的是这样的

enter image description here

当我试图找到解决方案时,我看到有人建议使用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);
            }
            });

1 个答案:

答案 0 :(得分:1)

首先,如果您的服务只是返回数据,建议不要使用 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);
   }
}

请注意,我在ToString()课程中编写了MyValues方法。这是因为您可以获得将从JSON调用发送的JSON格式。更多详情here

从AJAX调用时,您还需要指定charset

contentType: "application/json; charset=utf-8",

立即查看!确保您在请求中发送了正确的JSON。 ToString()方法将返回您的服务将接受的所需JSON格式。