【问题标题】:Web Api returns an error has occurredWeb Api 返回发生错误
【发布时间】:2018-01-16 22:43:29
【问题描述】:

我写了一个 api 来获取一些 json 格式的对象。它在 Linq 命令中获取值并转到返回方法。但没有返回我所期望的。

values return ({"Message": "An error has occurred."}) 

我搜索了很多,但还没有找到任何东西。

 public IHttpActionResult GetOrdersOfPostman(string postmanId)
    {
        try
        {
            var postmanCustomersModel = new List<PostmanCustomerModel>();
            var id = Convert.ToInt64(postmanId);

            var orderStatus = (byte) OrderStatus.DeliverToPostman;
            var orders = _orderRepository.AsQueryable().Where(x => x.PostmanId == id && x.OrderStatus==orderStatus &&
                         x.SellerCustomerId > 0).ToList();

            return Ok(orders);
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);
        }
    }

【问题讨论】:

  • 您可以尝试自己调试:在控制器主体的开头设置一个断点并单步执行代码以找出问题所在...
  • 我设置断点代码工作正常但返回错误。
  • 是的..尝试调试,您​​可以在 InnerException (ex.InnerException) 中找到它
  • 您是否在浏览器中浏览过该方法的 URL?如果是,那么输出是什么?
  • 您是否设置了正确的 [ResponseType(...)] 属性,您的订单是否可序列化?

标签: c# asp.net asp.net-mvc-4 asp.net-web-api


【解决方案1】:

有两种方法可以做到这一点。

  1. 包含Json library,然后返回自定义json对象。只需在 Json 中传递您的 orders 列表并返回即可。

return JsonConvert.SerializeObject(new jTableResponse(result), Formatting.None);

return Json(yourobject, JsonRequestBehavior.AllowGet);

  1. 另一种选择是创建自己的响应模型,然后使用 Json 库将其作为 Json 对象返回。

下面是完整的例子。

using System; 
namespace MyProject.Api_Models
{
    public class ApiResponse
    {
        public bool Status { get; set; }
        public Object Data { get; set; }
        public string Message { get; set; }
    }
}

它被用作:

[HttpPost]
public JsonResult GetGroupFriendsLists(int groupid)
{
    var grp = db.Groups.Where(k => k.GroupId == groupid).Any();
    if (!grp)
    {
        return Json(new ApiResponse
        {
            Message = "Invalid group inforamtion.",
            Status = false
        }, JsonRequestBehavior.AllowGet);
    }
    var lists = db.Groups.Where(k => k.GroupId == groupid).Select(k => k.SharedLists).FirstOrDefault().Where(k => k.ListType == SharedListTypes.Friends && (k.ExpiryDate == null || k.ExpiryDate.Value.Date > DateTime.Now.Date)).Select(
        k =>
        new
        {
            k.CreatorId,
            ExpiryDate = HelperFunctions.DateTimeFormattedString(k.ExpiryDate),
            k.ListId,
            k.ListName,
            k.ListType,
            TimeStamp = HelperFunctions.DateTimeFormattedString(k.TimeStamp),
            ItemsCount = k.ListItems.Count
        }).ToList();
    if (lists.Count <= 0)
    {
        return Json(new ApiResponse
        {
            Status = false,
            Message = "No friends lists in this group."
        }, JsonRequestBehavior.AllowGet);
    }
    return Json(new ApiResponse
    {
        Status = true,
        Message = "We found the friends shared lists of this group.",
        Data = lists
    }, JsonRequestBehavior.AllowGet);
}

你可以测试一下。

【讨论】:

  • 既然是web api,为什么这里需要使用Json()。为什么不 Ok()
  • 是的,它可以使用,但我认为,对于新手来说,更好地操纵和完全控制他们自己的自定义响应。
  • @PowerStar 这是一个简单的例子,不是为了开始第一个 API 的所有必要边界条件的复杂事物。
  • 从观点上看,您的回答似乎很复杂。 .net 已经提供了许多开箱即用的功能。所以我们需要使用它而不是重新发明。
  • 这一行真的让我很失望“return Json(yourobject)”。如果你编辑,那么我会投赞成票。
猜你喜欢
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 2013-05-21
  • 2017-05-28
  • 1970-01-01
  • 2020-07-10
  • 2021-12-17
  • 1970-01-01
相关资源
最近更新 更多