Передача данных из Ajax в ApiController - PullRequest
1 голос
/ 18 октября 2019

У меня проблемы с Asp.Net Core при попытке передать данные в вызове Ajax в параметр функции API Controller.

Я использую поле данных в вызове Ajax, чтобы передать значение «id». В контроллере API это значение должно быть назначено параметру "id", но никогда не должно быть.

// Ajax call
$.ajax({
    url: "/api/apicomment/GetPostComments",
    type: "GET",
    data: { 'id' : 2 },
    dataType: "json",
}).done(function (data) {
    // Some function
}).fail(function (handleError) {
    // Some function
});

Контроллер API - это обычный API-контроллер с поддержкой скаффолдинга, где я получаю конкретные комментарии с параметром id. Но каждый раз, когда я звоню, я получаю значение 0.

// API Controller
[HttpGet("{id}")]
[Route("GetPostComments")]
public async Task<ActionResult<IEnumerable<Comment>>> GetSpecificComment(int id)
{
      var comment = await _context.Comment.Where(c => c.PostId == id).ToListAsync();
      if (comment == null)
      {
         return NotFound();
      }

      return comment;
}

Пробовал много разных вещей, но я не могу понять это.

Буду рад любой обратной связи, которая может помочь!

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Вы также можете передать через строку запроса:

  1. Комментарий из data строки:

    // Ajax call
    $.ajax({
        url: "/api/apicomment/GetPostComments",
        type: "GET",
        data: { 'id' : 2 },
    
    }).done(function (data) {
        // Some function
    }).fail(function (handleError) {
        // Some function
    });
    
  2. использовать FromQuery дляполучить параметр:

    public async Task<ActionResult<IEnumerable<Comment>>> GetSpecificComment([FromQuery]int id)
    
1 голос
/ 18 октября 2019

Немного попробывать

Сначала о вашем URL-адресе API должно быть так

url: "/api/GetPostComments"

Было бы намного чище

Во-вторых, ваши данные должны быть такими

data: { id : 2 }

Наконец, вы не можете смешивать эти 2

[HttpGet("{id}")]
[Route("GetPostComments")]

Это должно быть так

[Route("api/[controller]")]
[ApiController]
public class SomeController : ControllerBase {

  [HttpGet("GetPostComments/{id}")]
  public async Task<ActionResult<IEnumerable<Comment>>> GetSpecificComment(int id)
  {
      var comment = await _context.Comment.Where(c => c.PostId == id).ToListAsync();
      if (comment == null)
      {
         return NotFound();
      }

      return comment;
 }

}

Таким образом, ваш URL должен быть примерно такимваш-контроллер / GetPostComments / 1

Вы можете прочитать подробнее здесь

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