Microsoft.AspNetCore.Blazor.HttpClient GetJsonAsync 不处理空结果



我正在使用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。

最新更新