Невозможно установить для типа содержимого значение «application/json» в jQuery.ajax

Когда у меня есть этот код

$.ajax({
    type: 'POST',
    //contentType: "application/json",
    url: 'http://localhost:16329/Hello',
    data: { name: 'norm' },
    dataType: 'json'
});

в Fiddler, я вижу следующий необработанный запрос

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

Но я пытаюсь установить тип содержимого из application/x-www -form-urlencodedв application/json. Но этот код

$.ajax({
    type: "POST",
    contentType: "application/json",
    url: 'http://localhost:16329/Hello',
    data: { name: 'norm' },
    dataType: "json"
});

Генерирует странный запрос (который я вижу в 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

Почему так? Что такое OPTIONS, когда там должен быть POST? И где мой тип контента установлен на application/json? И параметры запроса пошли почему-то.

ОБНОВЛЕНИЕ 1

На стороне сервера у меня очень простой сервис 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;
    }
}

Но почему-то я не могу вызвать этот метод с параметрами.

ОБНОВЛЕНИЕ 2

Извините, что так долго не отвечал.

Я добавил эти заголовки в свой ответ сервера

 Access-Control-Allow-Origin: *
 Access-Control-Allow-Headers: Content-Type
 Access-Control-Allow-Methods: POST, GET, OPTIONS

Это не помогло, у меня Метод не разрешеношибка с сервера.

Вот что говорит мой скрипач

enter image description here

Итак, теперь я могу быть уверен, что мой сервер принимает POST, GET, OPTIONS(если заголовки ответа работают так, как я ожидаю). Но почему "Метод не разрешен"?

В WebView ответ от сервера (вы можете увидеть ответ Rawна картинке выше) выглядит следующим образом

enter image description here

96
задан Vitalii Korsakov 23 December 2012 в 18:55
поделиться