【发布时间】:2022-11-04 06:02:48
【问题描述】:
我正在开发一个 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.。
我不确定我在这里缺少什么。
提前致谢!
【问题讨论】:
-
看起来控制器没有将您的调用映射到正确的方法。可能是因为
e.File是object并且您期待一个界面。你几乎肯定需要坚持通过具体的课程。在您的调用者方法中将e.File转换为myfileclass,并在您的控制器中期待myfileclass。
标签: blazor blazor-webassembly asp.net-web-api-routing