Blazor WASM Http调用未命中某些API端点.正在接收index.html



我有一个Blazor WASM页面,需要进行调用以从API获取一些数据。Blazor应用程序由ASPNetCore托管,托管应用程序包含API。

我的一些端点可以工作,但有些调用抛出Json序列化异常。

未处理的异常呈现组件:'<'是一个值的无效开头。路径:$|LineNumber:0|BytePositionInLine:0。

如果我查看服务器的实际响应,它看起来像是从我的WASM应用程序返回了index.html的内容。

控制器示例

[Authorize]
[ApiController]
[Route("api/[controller]")]
public class CompanyController : ControllerBase
{
private readonly ApplicationDbContext _context;
public CompanyController(ApplicationDbContext context)
{
_context = context;
}
[HttpGet("{id}")]
public async Task<IActionResult> Get(long id)
{
Company? company = await _context.Companies.FindAsync(id);
if (company == null)
{
return NotFound();
}
return Ok(company);
}
}

Blazor Page 示例


@page "/companies/{id:long}"
@attribute [Authorize]
@inject HttpClient Http
@inject NavigationManager Nav

@if (company != null)
{
<div>@company.Name</div>
}
else
{
<div>Loading Company...</div>
}
@code {
private Company? company;
[Parameter]
public long Id { get; set; }
protected override async Task OnInitializedAsync()
{
try
{
company = await Http.GetFromJsonAsync<Company>($"/api/company/{Id}");
}
catch (AccessTokenNotAvailableException exception)
{
exception.Redirect();
}
}
}

在上面的例子中,一切都按预期进行。但是,如果我进行以下两个更改,我将得到上面提到的Json异常。

  1. 创建一个名为WorkOrderController的相同控制器。其他一切都是一样的,包括从数据库中提取公司数据。只有控制器的名称不同
  2. 在Blazor页面中将Http请求更改为company = await Http.GetFromJsonAsync<Company>($"/api/workOrder/{Id}");

为什么有些端点可以工作,有些则不能?

因此,传递给GetFromJsonAsync的requestUri必须是小写的。我的请求失败了,因为我有一个资本";O〃;在";workOrder";。

我不知道为什么这是请求参数的要求,但遗憾的是,使路径小写解决了这个问题。

相关内容

  • 没有找到相关文章

最新更新