Вопрос по asp.net-mvc, jquery – ASP.NET WebAPI - как передать объект с помощью $ .getJSON

3

Ниже приведен элемент управления ASP.NET WebAPI:

<code>public SomeObject GetBenchMarkData(Comment comment)
        {
            //do stuff
        }
</code>

На стороне клиента я пробую это ниже:

<code>var comment = { ID: 0, Text: $('#text').val(), Author: $('#author').val(), Email: $('#email').val(), GravatarUrl: '' };
            var json = JSON.stringify(comment);
            $.getJSON("api/MintEIQAPI/" + json,
</code>

Проблема в том, что действие GetBenchMarkData никогда не вызывается вышеупомянутым запросом getJSON.

Может ли кто-нибудь помочь мне, что я делаю не так?

Благодарю.

Ваш Ответ

2   ответа
17

если вы передаете сложный тип через GET, вам нужно украсить параметр действия атрибутом FromUri.

На клиенте:

$.get('api/movies/test',
      {Name:'Henrique', Age:'24'}, 
      function (res) {
           console.log(res);
      }
);

На контроллере:

public void Get([FromUri] Customer c)
{
    ...
}

Таким образом, вы говорите WebApi десериализовать параметр из строки запроса. Также обратите внимание, что вы не используете строку, переданную на сервер.

Этот пост в блоге объясняет различия в привязках моделей WebApi и MVC: http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
6

getJSON выполняетGET запрос к серверу. Для передачи целых объектов,you have to execute a POST request.

вcase of a GETобъект JavaScript, который вы передаете вызовам jQuery Ajax, обычно преобразуется в параметры в кодировке URL-адреса, которые затем могут быть взяты индивидуально вашим методом на стороне сервера, например

$.ajax({
  url: "/someurl/getbenchmarkdata",
  data: JSON.stringify({ filterValue: "test" }),
  type: "GET"
  ...

});

и на вашей стороне сервера

public SomeObject GetBenchMarkData(String filterValue)
{
   ...
}

Вместо,if you want to transmit a whole object, вы должны выполнить вызов ajax как POST, как

$.ajax({
    url: "/someurl/benchmarkdata",
    type: "POST",
    data: JSON.stringify({ title: "My title"}),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    ...
});

И ваш серверный метод должен взять объект со свойствомTitle типаString.

мойпост в блоге тоже может помочь.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Nil Pun

Похожие вопросы