调用从AJAX返回IHttpActionResult的GET方法?

时间:2016-12-12 16:51:15

标签: c# ajax asp.net-web-api asp.net-web-api2 asp.net-web-api-routing

AJAX与返回GetAll的{​​{1}}方法一起使用,但是IQueryable,它不起作用并将“未定义”返回给浏览器, 这是GetOne类中的Get方法:

ApiController

这是AJAX功能:

[ResponseType(typeof(Author))]
public IHttpActionResult GetAuthor(int id)
{
    Author author = db.Authors.Find(id);
    if (author == null)
    {
        return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.NotFound, $"Author with {id} not found."));
    }

    return ResponseMessage(Request.CreateResponse(HttpStatusCode.OK, author));
}

这是因为$.ajax({ type: 'GET', url: 'api/Authors', dataType: 'json', data:{id:'1'}, success: function (data) { list.empty(); $.each(data, function (index, val) { var qualifier = val.AuthorId + ' - ' + val.Name; list.append('<li>'+qualifier+'</li>') }); } }); 会返回GetAuthor吗?

GetAuthors:

IHttpActionResult

控制台窗口的屏幕截图:

enter image description here

2 个答案:

答案 0 :(得分:3)

  

这是因为GetAuthor返回IHttpActionResult

否<!/强> 问题是您如何处理请求返回的响应。

示例操作返回的是单个作者,但却被视为客户端上的集合。

function GetData(id) {
    var url = 'api/Authors';
    if(id) url = url + '?id=' + id;
    $.ajax({
        type: 'GET',
        url: url,
        dataType: 'json',
        success: function (data) {
            list.empty();
            if (!jQuery.isArray(data)) data = [data]; // If a single object is returned, wrap it in an array
            $.each(data, function (index, val) {
                var qualifier = val.AuthorId + ' - ' + val.Name;
                list.append('<li>'+qualifier+'</li>')
            });
        }
    });
}

答案 1 :(得分:1)

正如聊天所讨论的那样,我们确认答案是success

然而,data值不是数组,并且返回的内容相当于:

{
    AuthorId: 1,
    Book: null,
    Name: "Name here"
}

因此success的以下jQuery代码有效:

success: function(data){ 
    var qualifier = data.AuthorId + ' - ' + data.Name; 
    list.append('<li>'+qualifier+'</li>'); 
}