Jquery Rest communication with WCF 3.5

2019-04-09 13:50发布

问题:

I'm testing the basics for exchanging rest messages between a asp.net mvc site and a WCF 3.5 service. The service is built using the template found in the WCF REST Starter Kit found on codeplex. I would like to exchange json messages using jquery. The REST Singleton service is working properly and it also provide examples of all the possible calling adding the help parameter ad the end of the uri. I arrive to perform GET requests with the built in jquery $.getJSON. I have problems doing the PUT (for updating values) and POST.

$.ajax({
     type: "PUT",
     dataType: "json",
     url: "http://localhost:1045/Service.svc/?format=json",
     data: '{"Value":testvalue}'
 }); 

What is the best approach for this? Is it possible not to use Ms. Ajax at all and is it correct to bypass it?

回答1:

"PUT" and "DELETE" are not supported by all browsers according to jQuery

The type of request to make ("POST" or "GET"), default is "GET". Note: Other HTTP request methods, such as PUT and DELETE, can also be used here, but they are not supported by all browsers.

http://docs.jquery.com/Ajax/jQuery.ajax#options

I didn't really understand your question though. Are you having a problem doing a PUT and a POST or just a POST? Does the GET work fine?

One error that I noticed was your data, notice I added it without quotes.

$.ajax({
     type: "PUT",
     dataType: "json",
     url: "http://localhost:1045/Service.svc/?format=json",
     data: { Value: "testvalue" }
});


回答2:

Also make sure you have your contentType set correctly in your ajax call.

contentType: "application/json"

The JQuery default is

contentType: "application/x-www-form-urlencoded"



回答3:

The PUT and DELETE verbs are not enabled on all servers. You need to place these verbs in a X-HTTP-Method-Override header. The valeu is taken from the header and substituted for a normal POST jsut before the request is processed.

The jQuery jREST Plugin can help you with this. If you are using WCF, you will also need to implement a RequestInterceptor (search for XHttpMethodOverrideInterceptor for mroe details).