Quand j'ai ce code
$.ajax({
type: 'POST',
//contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: 'json'
});
dans un violon, je peux voir la suite de la requête brute
POST http://localhost:16329/Hello HTTP/1.1
Host: localhost:16329
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost:14693/WebSite1/index.html
Content-Length: 9
Origin: http://localhost:14693
Pragma: no-cache
Cache-Control: no-cache
name=norm
Mais ce que je veux est de définir le type de contenu à partir de l'application/x-www-form-urlencoded d' application/json. Mais ce code
$.ajax({
type: "POST",
contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: "json"
});
Génère une demande étrange (ce que je peux voir dans un violon)
OPTIONS http://localhost:16329/Hello HTTP/1.1
Host: localhost:16329
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: http://localhost:14693
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache
Pourquoi est-ce? Qu'est-ce que les OPTIONS quand il faut y POSTER? Et où est mon type de contenu d'ensemble de l'application/json? Et les paramètres de la demande a disparu pour une raison quelconque.
Mise à JOUR 1
Sur le côté serveur, j'ai vraiment simple service RESTful.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestfulService : IRestfulService
{
[WebInvoke(
Method = "POST",
UriTemplate = "Hello",
ResponseFormat = WebMessageFormat.Json)]
public string HelloWorld(string name)
{
return "hello, " + name;
}
}
Mais pour une raison que je ne peux pas appeler cette méthode avec des paramètres.
Mise à JOUR 2
Désolé de ne pas répondre si longtemps.
J'ai ajouté ces en-têtes à ma réponse du serveur
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS
Il n'a pas aidé, j'ai la Méthode non autorisée d'erreur du serveur.
Voici ce que ma dit fiddler
Alors, maintenant, je peux être sûr que mon serveur accepte POST, GET, les OPTIONS (si les en-têtes de réponse de travailler comme je attendre). Mais pourquoi "Méthode non autorisée"?
Dans WebView réponse du serveur (vous pouvez voir le Raw de réponse sur l'image ci-dessus) ressemble à ceci