Wenn ich diesen Code habe
$.ajax({
type: 'POST',
//contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: 'json'
});
in Fiddler kann ich folgende rohe Anfrage sehen
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
Ich versuche jedoch, den Inhaltstyp von application / x-www-form-urlencoded auf application / json festzulegen . Aber dieser Code
$.ajax({
type: "POST",
contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: "json"
});
Erzeugt eine seltsame Anfrage (die ich in Fiddler sehen kann)
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
Warum ist das so? Was ist OPTIONEN, wenn es dort POST sein soll? Und wo ist mein Inhaltstyp auf application / json eingestellt? Und Anforderungsparameter sind aus irgendeinem Grund weg.
UPDATE 1
Auf der Serverseite habe ich einen wirklich einfachen RESTful-Service.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestfulService : IRestfulService
{
[WebInvoke(
Method = "POST",
UriTemplate = "Hello",
ResponseFormat = WebMessageFormat.Json)]
public string HelloWorld(string name)
{
return "hello, " + name;
}
}
Aber aus irgendeinem Grund kann ich diese Methode nicht mit Parametern aufrufen.
UPDATE 2
Entschuldigung, dass Sie nicht so lange geantwortet haben.
Ich habe diese Header zu meiner Serverantwort hinzugefügt
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS
Es hat nicht geholfen, ich habe Methode Fehler vom Server nicht erlaubt .
Hier ist, was mein Geiger sagt
Jetzt kann ich sicher sein, dass mein Server POST, GET, OPTIONS akzeptiert (wenn die Antwortheader wie erwartet funktionieren). Aber warum "Methode nicht erlaubt"?
In WebView sieht die Antwort vom Server (siehe Raw- Antwort auf dem Bild oben) folgendermaßen aus