#c# #asp.net-core
#c# #asp.net-core
Вопрос:
Ниже приведен мой код. Мне интересно, может быть, мне лучше использовать что-то другое. Я чувствую, что это должно быть довольно простым возвратом.
Репозиторий:
public Task<OrderHistory> GetInvoicedMacolaOrder(string orderNumber)
{
orderNumber = " " orderNumber;
DataContext.ChangeTracker.LazyLoadingEnabled = false;
var order = DataContext.OrderHistory
.Include(order => order.OrderLines)
.ThenInclude(line => line.vw_uniqueCartonIds)
.FirstOrDefaultAsync(o => o.ord_no == orderNumber);
return order;
}
OrderHistoryController:
[Authorize(Policy = "CreateReplacementOrder")]
[HttpGet("invoicedorder/{orderNumber}/get")]
public async Task<IActionResult> OrderLookUp(string orderNumber)
{
if (PoExists(orderNumber))
{
var order = await _mrepo.GetInvoicedOrder(orderNumber);
var orderToReturn = _mapper.Map<OrderHistoryDtoDetail>(order);
return Ok(orderToReturn);
}
else
{
return BadRequest("Could not find order number.");
}
}
Это то, что возвращает:
{
"ord_no": "51464326",
"status": "P",
"ord_dt": "2020-03-29T00:00:00",
"apply_to_no": null,
"oe_po_no": "3804339 ",
"cus_no": "65564654018",
"ship_to_name": "Omar Brown"
"OrderLines": [
{
"ord_type": "O",
"ord_no": "51464326",
"line_seq_no": 1,
"item_no": "jkhhuk",
"line_no": 1,
"vw_uniqueCartonIds": [
{
"box_id": 20,
"prod_cat": "044",
"box_number": 1,
"uniqueBoxID": "100001"
},
{
"box_id": 20,
"prod_cat": "044",
"box_number": 2,
"uniqueBoxID": "100002"
},
{
"box_id": 20,
"prod_cat": "044",
"box_number": 3,
"uniqueBoxID": "100003"
}
]
}
]
}
Чего я ожидаю:
{
"ord_no": "51464326",
"status": "P",
"ord_dt": "2020-03-29T00:00:00",
"apply_to_no": null,
"oe_po_no": "3804339 ",
"cus_no": "65564654018",
"ship_to_name": "Omar Brown"
"OrderLines": [
{
"ord_type": "O",
"ord_no": "51464326",
"line_seq_no": 1,
"item_no": "jkhhuk",
"line_no": 1,
"vw_uniqueCartonIds": [
{
"box_id": 20,
"prod_cat": "044",
"box_number": 1,
"uniqueBoxID": "100001"
},
{
"box_id": 21,
"prod_cat": "044",
"box_number": 2,
"uniqueBoxID": "100002"
},
{
"box_id": 22,
"prod_cat": "044",
"box_number": 3,
"uniqueBoxID": "100003"
}
]
},
{
"ord_type": "O",
"ord_no": "51464326",
"line_seq_no": 2,
"item_no": "58hhuk",
"line_no": 2,
"vw_uniqueCartonIds": [
{
"box_id": 25,
"prod_cat": "054",
"box_number": 1,
"uniqueBoxID": "200001"
},
{
"box_id": 26,
"prod_cat": "054",
"box_number": 2,
"uniqueBoxID": "200002"
}
]
}
]
}
Также я видел сообщения о ReferenceLoopHandling и добавил это в свой файл startup.cs, но безрезультатно.
services.AddControllers(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
})
.AddNewtonsoftJson(opt =>
{
opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
В чем причина проблемы?
Комментарии:
1. Это может помочь, если вы отладите его, чтобы сузить проблему, поскольку кажется, что это может быть проблема в репозитории, в
_mapper.Map
или при сериализации2. Кроме того, это может быть опечатка, но вы вызываете
GetInvoicedOrder
со своего контроллера, но показали реализациюGetInvoicedMacolaOrder
3. Если вам нужны ВСЕ, тогда зачем вы используете. FirstOrDefaultAsync(o => o.ord_no == Порядковый номер);
4. @jdweng Я новичок в .net в целом, что еще я могу использовать?
5. Попробуйте ForEachAsync вместо FirstOrDefaultAsync