Quando ho questo codice
$.ajax({
type: 'POST',
//contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: 'json'
});
in Fiddler posso vedere la seguente richiesta grezza
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
Ma quello che sto cercando è di impostare il tipo di contenuto da application / x-www-form-urlencoded ad application / json . Ma questo codice
$.ajax({
type: "POST",
contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: "json"
});
Genera una strana richiesta (che posso vedere in Fiddler)
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
Perché? Cos'è OPTIONS quando dovrebbe essere POST lì? E dov'è il mio tipo di contenuto impostato su application / json? E i parametri di richiesta sono andati per qualche motivo.
AGGIORNAMENTO 1
Sul lato server ho un servizio RESTful davvero semplice.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestfulService : IRestfulService
{
[WebInvoke(
Method = "POST",
UriTemplate = "Hello",
ResponseFormat = WebMessageFormat.Json)]
public string HelloWorld(string name)
{
return "hello, " + name;
}
}
Ma per qualche motivo non posso chiamare questo metodo con i parametri.
AGGIORNAMENTO 2
Scusa per non aver risposto così a lungo.
Ho aggiunto queste intestazioni alla mia risposta del server
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS
Non ha aiutato, ho il metodo non consentito l' errore dal server.
Ecco cosa dice il mio violinista
Quindi, ora posso essere sicuro che il mio server accetta POST, GET, OPTIONS (se le intestazioni di risposta funzionano come mi aspetto). Ma perché "Metodo non consentito"?
In WebView la risposta dal server (puoi vedere la risposta grezza nell'immagine sopra) ha questo aspetto