ASP MVC 3 - Jquery Ajax всегда отправляет параметры, а не сообщения - PullRequest
1 голос
/ 19 июня 2011

У меня есть простой ajax-запрос javascript:

$("#login-submit").button().click(function() {
                var ajaxOptions = {
                    url: "http://localhost:29097/authentication/",
                    type: "POST",
                    data: $("login-form").serialize(),
                    success: function(result) { $("body").html(result); }
                };
                $.ajax(ajaxOptions);
            });

Однако, когда я отправляю запрос, он всегда отправляет запрос OPTIONS, а не указанный запрос POST.После прочтения этой статьи, кажется, что может перейти к публикации на нескольких сайтах.Я добавил фильтр пользовательских действий в мое приложение MVC, которое проверяет запросы OPTION и отвечает заголовком «Разрешить», указывающим «GET, POST, PUT, DELETE», хотя кажется, что он никогда не выполняет последующий запрос POST ...здесь чего-то не хватает?

Запрос (пробовал это в Firefox, Chrome):

OPTIONS http://localhost:29097/authentication/ HTTP/1.1
Host: localhost:29097
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: null
Access-Control-Request-Method: POST
Access-Control-Request-Headers: x-requested-with

Ответ:

HTTP/1.1 401 Unauthorized
Server: ASP.NET Development Server/10.0.0.0
Date: Sun, 19 Jun 2011 16:20:41 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 3.0
Allow: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Max-Age: 1000
Access-Control-Allow-Headers: *
Access-Control-Allow-Origin: *
Cache-Control: private
Content-Length: 0
Connection: Close

Я сам отправляю запрос 401через MVC, как казалось, это будет лучший заголовок для указания того, что учетные данные пользователя недействительны.Может ли этот код состояния вызывать какие-либо проблемы?

1 Ответ

5 голосов
/ 20 июня 2011

Вы используете браузер, который реализует Cross Origin Resource Sharing . Для поддержки этого ваш сервер должен ответить на запрос OPTIONS с заголовком Access-Control-Allow-Origin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...