2011-06-19 2 views
1

У меня есть простой яваскрипта Ajax запрос:ASP MVC 3 - Jquery Ajax всегда Параметры отправки не Начать

$("#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, как это казалось, что это было бы лучший заголовок для использования, чтобы указать, что учетные данные пользователей недействительны. Может ли этот код состояния вызывать какие-либо проблемы?

+0

Что делать, если вы ответите 200, а не 401? Мне кажется, что реакция с ошибкой вряд ли будет работать. – Pointy

+0

@Pointy - То же самое, он просто возвращается и никакого последующего запроса не делается. Эта проблема началась, когда я делал простой веб-сервис ASPMVC RESTful, и всякий раз, когда я вызывал его с помощью Jquery Ajax, параметры не были автоматической привязкой и всегда были нулевыми. Это привело к тому, что я заметил, что заголовки не содержат никакой информации о сообщении, поскольку это был запрос OPTIONS, и поскольку он не отслеживает ВАРИАНТЫ с POST после получения ответа, я немного потерял то, что еще я могу сделать ... Я уверен, что это должно быть выполнимо, хотя ... – somemvcperson

ответ

5

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

+0

Разве это не включено в ответ, который я написал выше? Я также пытался включить Access-Control-Allow-Methods, но это не сработало, а где-то еще я увидел сообщение, которое просто попробовал «разрешить», попробовал его с обоими ... еще не повезло – somemvcperson

+0

@somemvcperson Вы правы является. Спецификация, с которой я связан, должна содержать все необходимые указания относительно того, какие заголовки необходимы в этой конкретной ситуации. –

+0

Я пробовал все соответствующие заголовки и не испытывал такой удачи :(Я делал больше исследований и, видимо, вы просто не можете сделать xmlHttpRequest на стороне клиента другому домену: http://www.jquery-tutorial.net/ajax/same -origin-policy Мне очень сложно поверить, что вы не можете настроить сервер для приема XSS, если вы ДЕЙСТВИТЕЛЬНО знаете, что вы делаете ... Что такое веб-сервис, если вы можете использовать его только из своего собственного домена? альтернативы, которые я вижу, это JSONP, прокси-сервер, Flash-прокси ... все они, похоже, разрушают причину наличия чистого веб-сервиса ... – somemvcperson

Смежные вопросы