Blazor WASM api调用在POST上得到404,但在GET上得到200



我正在处理一个Blazor WASM项目,我有一个页面需要将文件发布到服务器。所以我写了这样的东西:

@page "/Test"
@inject HttpClient httpClient
<h4>Please upload a file.</h4>
<form>
<InputFile OnChange="OnInputFileChange"/>
</form>
@code {
private async Task OnInputFileChange(InputFileChangeEventArgs e)
{
// Returns 1 just fine
var dummyTest = await httpClient.GetFromJsonAsync<int>("api/Test/Action");
// Gets a 404 error
var response = await httpClient.PostAsJsonAsync("api/Test/Action", e.File);
var content = await response.Content.ReadFromJsonAsync<int>();
}
}

我有这个控制器

[ApiController]
[Route("api/[controller]/[action]")]
public class TestController : ControllerBase
{
[HttpGet]
public async Task<ActionResult<int>> Action()
{
return 1;
}
[HttpPost]
public async Task<ActionResult<int>> Action(IFormFile file)
{
return 1;
}
}

我的问题是GET请求执行得很好,dummyTest设置为1,但response得到404,尝试调用ReadFromJsonAsync得到System.Text.Json.JsonException: The input does not contain any JSON tokens.

我不确定我在这里错过了什么。

提前感谢!

到目前为止,我在Blazor中发现,服务器和客户端之间需要一个JWT或替代方案来进行通信。

在Blazor.Client项目中,您可以选择从程序中删除以下内容。cs

请注意,下面的删除是不安全的,我不确定删除它的后果。否则,你必须实现某种身份验证提供程序,我使用auth0来解决这个问题。

builder.Services.AddHttpClient("BlazorExample.ServerAPI", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress));
//remove this: .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();

相关内容

最新更新