我创建了一个由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>
答案 0 :(得分:0)
请dataType: "jsonp"
仅使用type:"GET"
。所以,如果您使用的是jsonp
,那么您必须使用它:
type: "GET", // or remove it, if not available then "GET" is default set
.......
dataType: "jsonp",
在您发表评论后,我建议您这样做:
$.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 。