首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"'<‘是值的无效开始。“ASP.NET-Core托管Blazor组件

"'<‘是值的无效开始。“ASP.NET-Core托管Blazor组件
EN

Stack Overflow用户
提问于 2021-05-25 15:19:20
回答 3查看 5.1K关注 0票数 0

我以前搜索过,并试图执行答案,但没有成功。

进入邮递员的url /blogpage返回一个200 OK。

我被困住了,似乎把自己画在了一个角落里,希望有人指出显而易见的事情。

谢谢大家

更新了新的见解和工作代码.

铬中的误差

代码语言:javascript
复制
      Unhandled exception rendering component: '<' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.
System.Text.Json.JsonException: '<' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.
 ---> System.Text.Json.JsonReaderException: '<' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0. ```



My Razor-Component code-block

@code {
    private List<BlogItem> BlogPosts = new List<BlogItem>();

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {

        BlogPosts = await Http.GetFromJsonAsync<List<BlogItem>>("GetAllBlogPosts");
    }
}
**EDIT - got a working code going** 

List<BlogItem> BlogPosts;
    protected override async Task OnInitializedAsync()
    {
        var response = await Http.GetAsync("/api/GetAllBlogPosts");
        if (response.IsSuccessStatusCode)
        {
            BlogPosts = await response.Content.ReadFromJsonAsync<List<BlogItem>>();
    enter code here

My BlogController

 [Route("api[controller]")]
    [ApiController]
    public class BlogController : ControllerBase
    {
        private readonly ApplicationDbContext _context;
        public BlogController(ApplicationDbContext context)
        {
            this._context = context;
        }
          public List<BlogItem> BlogPosts { get; set; } = new List<BlogItem>
          { 
        new BlogItem { Title = "My first blog", Summary = "My first blog ever"}
      };
    
        [HttpGet]
        [Route("GetAllBlogPosts")]
      public ActionResult<List<BlogItem>>Get()
        {
            return Ok(_context.BlogItem);
        }
**EDIT - changed the route to this - [Route("/api/GetAllBlogPosts")]**
EN

回答 3

Stack Overflow用户

发布于 2021-05-26 11:22:01

我相信你的问题源于:

代码语言:javascript
复制
BlogPosts = await Http.GetFromJsonAsync<List<BlogItem>>("GetAllBlogPosts");

这一行假设Json结果来自符合List的API。如果调用API时出错,则结果将不一致。您的问题中报告的错误是试图反序列化这个未确认的结果。

要找到问题的真正根源,请尝试以下模式:

代码语言:javascript
复制
HttpResponseMessage res = await Http.GetAsync("GetAllBlogPosts");
if (res.IsSuccessStatusCode)
{
    // Only deserialize when we did not have an API failure
    BlogPosts = res.Content.ReadFromJsonAsync<List<BlogItem>>();
}
else
{
    // Otherwise treat the response as an error message
    string errMsg = await res.Content.ReadAsStringAsync();
    Console.WriteLine(errMsg);
    throw new Exception(errMsg);
}

这样,只有在响应成功时才会尝试反序列化。如果调用得到一个错误,它将将内容(错误消息)作为字符串读取。该字符串将告诉您问题的真正根源是什么。

票数 3
EN

Stack Overflow用户

发布于 2021-05-25 15:59:57

固定动作

代码语言:javascript
复制
        [Route("GetAllBlogPosts")]
      public ActionResult<List<BlogItem>> Get()
        {
            return Ok(_context.Set<BlogItem>().ToList());
        }

并试图取代

代码语言:javascript
复制
if (response.IsSuccessStatusCode)
        {
  BlogPosts = await response.Content.ReadFromJsonAsync<List<BlogItem>>();

使用

代码语言:javascript
复制
if (response.IsSuccessStatusCode)
{
var stringData = await response.Content.ReadAsStringAsync();
BlogPosts = JsonConvert.DeserializeObject<List<BlogItem>>(stringData);
}
else{ ...error code}
票数 0
EN

Stack Overflow用户

发布于 2021-05-26 09:31:31

它是否是一个BOM (字节顺序标记)-尝试打开类似于notepad++,选择UTF-8编码,保存,沙尝试重新启动。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67690940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档