ASP Mvc 3 не будет автоматически связываться с JSON после запроса - PullRequest
1 голос
/ 18 июня 2011

У меня есть простой контроллер:

public class UserCredentials
{
   public string Username {get;set;}
   public string Password {get;set;}
}

public class AuthenticationController : Controller
{
    public ActionResult Authenticate(UserCredentials credentials)
    {
        // Do stuff
    }
}

И простой кусочек Jquery:

var credentials = {
    Username: "test",
    Password: "test"
};

$("#send-request").button().click(function() {
    var ajaxOptions = {
        url: "http://localhost:29097/authentication/",
        type: "POST",
        dataType: 'json',
        data: JSON.stringify(credentials),
        contentType: "application/json; charset=utf-8",
        success: function(result) { $("#result").html(result); }
    };
    $.ajax(ajaxOptions);
});

Всякий раз, когда я нажимаю кнопку на странице, чтобы отправить запрос, объект UserCredentials содержит null для обоих свойств ... Я пытался публиковать сообщения напрямую через Fiddler с JSON, но мне тоже не повезло ... мне нужно сделать что-нибудь особенное, чтобы заставить это работать?

- РЕДАКТИРОВАТЬ -

Я прошел двойную проверку, и кажется, что когда данные покидают клиента, они правильно содержат данные json в заголовке. Однако, когда фидлер берет его, он, кажется, не содержит данных, похоже, что он выполняет вызов OPTIONS:

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: content-type,x-requested-with

Если это поможет, я запускаю приложение MVC через Сервер разработки (думаю, оно называется Cassini)

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Попробуйте передать этот JSON на стороне клиента.

var credentials = { "credentials": { "UserName": "test", "Password": "test" } };

Назовите JQuery AJAX точно , как вы сделали выше.

При построении JSON на стороне клиента, вы должны принять во внимание параметр , который есть у вас на стороне сервера, в данном случае это учетные данные в этой строке:

public ActionResult Authenticate(UserCredentials credentials)
{
    // Do stuff
}
0 голосов
/ 18 июня 2011

Когда вы отправляете запрос POST - это должен быть набор значений ключа. Невозможно посмотреть, что делает JSON.stringify (учетные данные), но решить проблему с помощью http://www.ieinspector.com/httpanalyzer/. будет намного проще. Этот инструмент покажет вам все детали запроса, который вы отправляете.

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