将数据从Ajax传递到ApiController

时间:2019-10-18 08:35:39

标签: c# ajax asp.net-core .net-core asp.net-core-mvc

我在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 个答案:

答案 0 :(得分:1)

没什么可尝试的

首先要了解您的API网址

url: "/api/GetPostComments"

那会干净得多

第二个数据应该是这样的

data: { id : 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;
 }

}

因此您的网址应类似于此api / your-controller / GetPostComments / 1

您可以阅读更多here

答案 1 :(得分:1)

您还可以通过查询字符串进行传递:

  1. 注释echo "<script>window.close();</script>"; 行:

    echo "<script>close();</script>";
    
  2. 使用data来获取参数:

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