我有一个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异常。
- 创建一个名为
WorkOrderController
的相同控制器。其他一切都是一样的,包括从数据库中提取公司数据。只有控制器的名称不同 - 在Blazor页面中将Http请求更改为
company = await Http.GetFromJsonAsync<Company>($"/api/workOrder/{Id}");
为什么有些端点可以工作,有些则不能?
我不知道为什么这是请求参数的要求,但遗憾的是,使路径小写解决了这个问题。