mz1*_*378 7 json blazor blazor-webassembly
我有一个带有控制器方法的 Blazor Webassembly 项目,如下所示:
[HttpGet]
public async Task<List<string>> GetStatesForProfile()
{
IConfigurationSection statesSection = configuration.GetSection("SiteSettings:States");
var sections = statesSection.GetChildren();
var states = statesSection.GetChildren().Select(s => s.Key).ToList<string>();
return states;
}
Run Code Online (Sandbox Code Playgroud)
剃刀页面调用这个方法:
private async Task<bool> GetStatesModel()
{
try
{
States = await http.GetJsonAsync<List<string>>("api/account/getstatesforprofile");
...
}
catch (Exception ex)
{
Console.WriteLine($"Exception: {ex.Message}, Inner: {ex.InnerException.Message}");
}
Run Code Online (Sandbox Code Playgroud)
我得到这个异常:
例外:“<”是值的无效开头。
我从 appsettings.json 文件中读取了这些值,并且值中没有“<”。
{
"SiteSettings": {
"States": {
"New York": ["NYC"],
"California": ["Los Angeles", "San Francisco"]
}
}
Run Code Online (Sandbox Code Playgroud)
此外,我在控制器方法中放置了一个断点,但它没有命中。这是什么错误?是从解析json吗?以及如何解决这个问题?
Lau*_*nen 20
我有一个非常相似的问题。
最后发现我的浏览器缓存了 HTML 错误页面(我猜我第一次尝试时代码遇到了一些问题)。无论我如何尝试修复代码,我仍然只从缓存中收到错误。清除我的缓存也解决了这个问题。
小智 14
当您尝试访问不存在的 API 时,就会发生这种情况。您必须检查 AppSettings 下的 API 项目连接字符串,并确保其正确且正在运行。如果它是 Blazor 项目,您可以将其设置为默认项目,执行并查看是否收到 json 响应。
您收到的响应很可能html
不是JSON
您请求的端点的实际格式。请检查一下。
as HTML 通常以<html>
标签开头,JSON 验证器在第一个字符处失败。
您还应该清除所有可能干扰返回数据的缓存。(这已经帮助人们解决了同样的问题)
我知道这是一个老问题,但它是谷歌搜索错误时的最重要结果之一。
我只是花了比我愿意承认的更多的时间来追踪这个错误。我有一个简单的 Blazor 托管应用程序,与模板基本没有变化。在本地运行时它工作得很好,但是当发布到我的网络主机时 API 调用失败了。我终于发现问题是我正在从客户端项目运行发布。当我更改为服务器项目时,它工作正常。
希望我长期的沮丧和轻微的愚蠢能够避免其他人犯类似的错误。
此错误表示项目目标框架版本与计算机上安装的运行时不匹配。因此,请确保项目的目标框架与已安装的运行时相匹配 - 这可以通过多种方式进行验证;其中之一是查看 Visual Studio 安装程序的“各个组件”选项卡并查找目标版本。
TargetFramework
例如, proj文件中有属性:
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
然后启动 Visual Studio 安装程序,单击“修改”,然后访问“单个组件”选项卡:
安装缺少的运行时(在本例中为 .NET 5 运行时),然后就可以开始了。
归档时间: |
|
查看次数: |
5178 次 |
最近记录: |