从 AJAX 调用 return IHttpActionResult 的 GET 方法?

Calling GET method that return IHttpActionResult from AJAX?

AJAX 与 returns IQueryableGetAll 方法一起工作正常,但与 GetOne 一起工作,它不起作用 [=38] =] "undefined" 到浏览器, 这是 ApiController class:

中的 Get 方法
[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 函数:

$.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 returns IHttpActionResult吗?

获取作者:

public IQueryable<Author> GetAuthors()
{
    return db.Authors;
}

控制台截图window:

Is this because GetAuthor returns 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>')
            });
        }
    });
}

根据聊天讨论,我们确认答案是 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>'); 
}