我正在使用Microsoft。AspNetCore。Blazor。HttpClient在我的API端点上执行请求。
如果下面的调用没有发现任何内容,则会引发异常。
using var client = auth.GetMyToken();
return await Task.Run(async () => await client.GetJsonAsync<MyModel>($"getsomething/{id}"));
错误显示:
{"输入不包含任何JSON令牌。输入应为当isFinalBlock为true时,从有效的JSON令牌开始。行号:0|BytePositionInLine:0。"}
我猜它这样做是因为返回不是JSON(它什么都不是(
我宁愿不将Try{}
块封装在它周围,以处理未找到的记录。
如果找不到记录,我如何修改它以返回null(或空模型(?
空结果不应给出错误。
老Json API报告
输入不包含任何JSON令牌。
和新的
不支持提供的ContentType;
它们都是由试图将HTML解析为Json引起的。当API位于同一主机上(如Hosted模板中(时,这对于Blazor WebAssembly来说是"正常"的(不好(。
API的url中的任何错误都会导致用";对不起,这里什么都没有"作为身体。你不会得到404。
所以,调试你的路由。
是的,这是正确的。Blazor GetFromJsonAsync不会处理空的Json结果。相反,您应该在web api控制器中返回结果时这样做:
public async Task<IActionResult> GetQuote(string quoteid)
{
int QuoteID = int.Parse(quoteid);
var quote = await _dataContext.tblQuotes
.Where(x => x.ID == QuoteID)
.SingleOrDefaultAsync();
if (quote == null) //DO NOT RETURN NULL
quote = new Quote();
return Ok(quote);
请注意,如果引号为null,我将返回一个新的quote((,因此引号对象不为null。