例外:“<”是一个无效的值开始

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 错误页面(我猜我第一次尝试时代码遇到了一些问题)。无论我如何尝试修复代码,我仍然只从缓存中收到错误。清除我的缓存也解决了这个问题。

  • 哇哇哇。今天我在这件事上浪费了至少一个小时。啊。请修复此 Blazor。 (2认同)
  • 三天。祝福你。谢谢。 (2认同)

小智 14

当您尝试访问不存在的 API 时,就会发生这种情况。您必须检查 AppSettings 下的 API 项目连接字符串,并确保其正确且正在运行。如果它是 Blazor 项目,您可以将其设置为默认项目,执行并查看是否收到 json 响应。


Ron*_*Ron 9

您收到的响应很可能html不是JSON您请求的端点的实际格式。请检查一下。

as HTML 通常以<html>标签开头,JSON 验证器在第一个字符处失败。

您还应该清除所有可能干扰返回数据的缓存。(这已经帮助人们解决了同样的问题)


Slu*_*sie 6

我知道这是一个老问题,但它是谷歌搜索错误时的最重要结果之一。

我只是花了比我愿意承认的更多的时间来追踪这个错误。我有一个简单的 Blazor 托管应用程序,与模板基本没有变化。在本地运行时它工作得很好,但是当发布到我的网络主机时 API 调用失败了。我终于发现问题是我正在从客户端项目运行发布。当我更改为服务器项目时,它工作正常。

希望我长期的沮丧和轻微的愚蠢能够避免其他人犯类似的错误。


Boz*_*eff 6

此错误表示项目目标框架版本与计算机上安装的运行时不匹配。因此,请确保项目的目标框架与已安装的运行时相匹配 - 这可以通过多种方式进行验证;其中之一是查看 Visual Studio 安装程序的“各个组件”选项卡并查找目标版本。

TargetFramework例如, proj文件中有属性:

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

然后启动 Visual Studio 安装程序,单击“修改”,然后访问“单个组件”选项卡:

未安装所需框架

安装缺少的运行时(在本例中为 .NET 5 运行时),然后就可以开始了。