0

我一直在尝试从 Blazor 客户端 Web 程序集中调用单独的 asp.net 核心 Web api。我在这个控制器中使用了模板 Web API 模板。我在 startup.cs 中设置了 CORS。我在 Blazor 客户端中使用标准 HTTP 客户端。在本地运行,我可以在 API 代码上设置一个断点并查看它是否被命中。但是客户端抛出异常:类型错误

任何帮助将不胜感激。

大卫

[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        var rng = new Random();
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = rng.Next(-20, 55),
            Summary = Summaries[rng.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

Startup.cs
     services.AddCors(options =>
            {
                options.AddPolicy(name: MyAllowSpecificOrigins,
                                  builder =>
                                  {
                                      builder.WithOrigins("http://example.com",
                                                          "http://www.contoso.com")
                                                          .AllowAnyOrigin()
                                                          .AllowAnyMethod()
                                                          .AllowAnyHeader();
                                  });
            });

Blazor Client
var response = await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast");
4

2 回答 2

2

我遇到了同样的错误,在使用开发人员工具控制台时,看起来混合内容是不允许的(https 和 http)。混合内容:“https://”处的页面是通过 HTTPS 加载的,但请求了不安全的资源“http://”。此请求已被阻止;内容必须通过 HTTPS 提供。检查您的页面是否也是这种情况。

于 2020-07-20T18:22:47.247 回答
0
  1. 确保您的网址必须完整,例如 https://www.xxxxxx.com.... 或 http://www.xxxxxx.com....

  2. 对于具有付费 ssl 证书的已发布 API,以从客户端的 API 获取数据

例子:

private readonly HttpClient httpClient;

public TblMenuSER(HttpClient httpClient)
{
    this.httpClient = httpClient;
}

public async  Task<IEnumerable<TblMenus>>Getoutput()
{
    return await this.httpClient.GetFromJsonAsync<TblMenus[]>("https://xxxxx.com/BLZ/api/GETData/x,x,x,x");
}
于 2022-01-22T06:30:32.313 回答