Quando eu tiver este código
$.ajax({
type: 'POST',
//contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: 'json'
});
no Fiddler posso ver o seguinte pedido bruto
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
Mas o que estou tentando é definir o tipo de conteúdo de application / x-www-form-urlencoded para application / json . Mas este código
$.ajax({
type: "POST",
contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: "json"
});
Gera solicitação estranha (que posso ver no 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
Por que é que? O que são OPÇÕES quando deveria haver POST lá? E onde está meu tipo de conteúdo definido como application / json? E os parâmetros de solicitação desapareceram por algum motivo.
ATUALIZAÇÃO 1
No lado do servidor, tenho um serviço RESTful muito simples.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestfulService : IRestfulService
{
[WebInvoke(
Method = "POST",
UriTemplate = "Hello",
ResponseFormat = WebMessageFormat.Json)]
public string HelloWorld(string name)
{
return "hello, " + name;
}
}
Mas, por algum motivo, não posso chamar esse método com parâmetros.
ATUALIZAÇÃO 2
Desculpe por não responder tanto tempo.
Eu adicionei esses cabeçalhos à minha resposta do servidor
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS
Não adiantou, tenho Método não permitido erro do servidor.
Aqui está o que meu violinista diz
Então, agora posso ter certeza de que meu servidor aceita POST, GET, OPTIONS (se os cabeçalhos de resposta funcionarem como eu esperava). Mas por que "Método não permitido"?
Na resposta do WebView do servidor (você pode ver a resposta bruta na imagem acima) fica assim