使用jquery查询wcf rest服务(不允许405方法)

时间:2014-05-28 13:21:33

标签: jquery json wcf rest wcf-rest

我创建了一个由jquery使用的WCF休息服务。该服务托管在我的本地计算机上。该服务似乎只有在我使用GET动词时才有效。如果我使用任何其他我得到405(方法不允许)错误。我想使用jquery将json对象发布到我的服务。

[ServiceContract]
public interface ITest
{
    [OperationContract]
    [WebInvoke(Method = "PUT", UriTemplate="Contact", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
    [Description("Send contact us message.")]
    string Log(Someobject object);
}

客户代码:

$.ajax({
           type: "PUT",
            url: "http://localhost/servicename/ContactUs.svc/Contact",
            data: JSON.Stringify(jsonObject),
            contentType: "application/json; charset=utf-8",
            processData:true,
            dataType: "jsonp",
            success: function (data) {
                alert("Ping" + data);
            },
            error: function (error) {
                alert("Failed to ping server" + error);
            }
        });

Web Config

<behavior name="ContactUsBehaviour">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="ContactUsEndPointBehavior">
      <webHttp helpEnabled="true"/>
    </behavior>
  </endpointBehaviors>

<services>
  <service name="servicename.ContactUs" behaviorConfiguration="ContactUsBehaviour">
    <endpoint address="" binding="webHttpBinding" bindingConfiguration="JSONPBinding" contract="servicename.IContactUs" behaviorConfiguration="ContactUsEndPointBehavior"/>
  </service>
</services>

1 个答案:

答案 0 :(得分:0)

dataType: "jsonp"仅使用type:"GET"。所以,如果您使用的是jsonp,那么您必须使用它:

type: "GET", // or remove it, if not available then "GET" is default set
.......
dataType: "jsonp",

Another answer which can help you.


在您发表评论后,我建议您这样做:

$.ajax({
     type: "GET", // change to GET
     url: "/servicename/ContactUs.svc/Contact", // remove the http://localhost
     data: JSON.Stringify(jsonObject),
     contentType: "application/json; charset=utf-8",
     processData:true,
     dataType: "json",   // change jsonp to json
     success: function (data) {
         alert("Ping" + data);
     },
     error: function (error) {
         alert("Failed to ping server" + error);
     }
});

或者,如果您仍想使用http://localhost,则必须在服务器端启用 cors

A post about enabling CORS (Cross Origin Resource Sharing.)