【问题标题】:Blazor GetAsync request returns 401 status codeBlazor GetAsync 请求返回 401 状态代码
【发布时间】:2019-12-13 18:10:49
【问题描述】:

我是 blazor 新手,正在尝试使用 .NET Core /EF Core 3 和 Visual Studio 2019 创建应用程序。我已经设置了一个数据库模型和一个 API,用于获取所有地址 (/api/Address) 并浏览到此在浏览器中返回数据库中的所有记录。但是我在 Razor 文件中的 My GetAsync 方法返回 401,最终返回 null。

这是我的 Razor 代码:

@functions 
{
   Address[] addresses;
   protected override async Task OnInitializedAsync()
   {
     addresses = await Http.GetJsonAsync<Address[]>("api/Address");
   }
}

这是我的 API

[Produces("application/json")]
[Route("api/[controller]")]
[ApiController]
public class AddressController : ControllerBase
{
    private readonly MyDataContext _context;
    // GET: api/Address
    [HttpGet]
    public async Task<ActionResult<IEnumerable<Address>>> GetAddresses()
    {
        return await _context.addressesDbSet.ToListAsync();
    }
}

我得到的所有错误都说

 HttpRequestException: Response status code does not indicate success: 401 (Unauthorized).

没有进一步的澄清,我无法理解原因,任何建议或建议将不胜感激。

【问题讨论】:

  • startup.cs 文件中的配置部分是否有:endpoints.MapBlazorHub(); ?
  • 是的,已经有

标签: c# entity-framework asp.net-core .net-core blazor


【解决方案1】:

我已经解决了这个问题,下面是我的解决方案,以防其他人遇到同样的问题。

注入HttpClient后,我在调用GetAsSync之前将以下参数传递给HttpClient

var handler = new HttpClientHandler() 
{ 
    UseDefaultCredentials = false, 
    Credentials = System.Net.CredentialCache.DefaultCredentials,
    AllowAutoRedirect = true 
};

Http = new HttpClient(handler);
Http.BaseAddress = new Uri(/*YOUR BASE Uri*/);

Addresses = await Http.GetJsonAsync<Address[]>("api/Address");

【讨论】:

  • 感谢您回来更新我们的解决方案。
  • 你是怎么解决这个问题的?你是如何让 GetJsonAsync 为你工作的?它以前对您不起作用...您是否安装了软件包: Microsoft.AspNetCore.Blazor.HttpClient ?你当然做到了。但是您是否阅读过:“旨在与在 WebAssembly 下运行的 Blazor 一起使用”。但很可惜,您的应用是 Blazor Server 应用。你知道你现在在服务器上使用的 HttpClient 并不是真正的 HttpClient,比如它不支持 WebSockets 等。它只是用 JavaScript 实现的 HTTP 调用。
  • 好的,这就够了......我只是想让其他人警惕你的“解决方案”。顺便说一句,这里不需要HttpClientHandler,可能会被忽略。
  • 我同意这应该不需要 - 但我不会投反对票,因为我讨厌人们这样做:) - 还有,这个我在一个开源项目中使用了代码,但因为我们需要在同一个应用程序中支持服务器端和客户端 Blazor,并且我们需要手动传递身份验证 cookie。对于普通的服务器端 Blazor 应用程序,这不是必需的。
  • 老实说,我不太确定上述错误 (401) 的原因是什么,我认为是身份验证/凭据相关问题,当我通过上述处理程序参数时,一切正常,但仍在尝试了解更多...让我知道什么对你们有用。谢谢
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 2019-04-02
  • 2016-06-22
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多