首页 > 解决方案 > IIS Express 崩溃 asp.net 3.1 utf8 编码

问题描述

我一直在 asp.net mvc 中使用此函数从 API 获取数据,但在 asp.net core 中它崩溃了。我相信这可能是与.net核心中的utf8有关的问题有没有其他人对此有问题我只是得到一个-1的iis express错误并且代码爆炸了

public async Task<List<Stock>> GetStockFromApi()
{    
    List<Stock> _result = new List<Stock>();
    var uri = new Uri(string.Format(Constants.GetALlStock, string.Empty));
    var response = await _httpClient.GetAsync(uri);
    if (response.IsSuccessStatusCode) {
       var byteArray = await response.Content.ReadAsByteArrayAsync();
       var content = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
      _result = JsonConvert.DeserializeObject<List<Stock>>(content);
     }
   return _result.ToList();
}

标签: asp.net-core

解决方案


确保您的 api 结果 ( byteArray) 在您的情况下是正确的。

当我在全新的 asp.net core 3.1 mvc 项目中使用您的代码时,它运行良好:

1.将Microsoft.AspNetCore.Mvc.NewtonsoftJson包从PMC添加到项目

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson -Version 3.1.0

2.在startup.cs中注册

services.AddControllersWithViews().AddNewtonsoftJson();

3.测试动作:

public async Task<List<Stock>> GetStockFromApi()
    {
        List<Stock> _result = new List<Stock>();
        var uri = new Uri("https://localhost:44321/home/GetAllStock");
        using (var client = new HttpClient())
        {
            var response = await client.GetAsync(uri);
            if (response.IsSuccessStatusCode)
            {
                var byteArray = await response.Content.ReadAsByteArrayAsync();
                var content = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
                _result = JsonConvert.DeserializeObject<List<Stock>>(content);
            }
            return _result.ToList();
        }

    }
public ActionResult<List<Stock>> GetAllStock()
    {
        var list = new List<Stock>()
        {
            new Stock()
            {
                Id = 1,
                Name="hello"
            },
            new Stock()
            {
                Id = 2,
                Name="wrold"
            },
        };
        return Ok(list);
    }

推荐阅读