【问题标题】:Blazor WASM api call gets 404 on POST but 200 on GETBlazor WASM api 调用在 POST 上获得 404,但在 GET 上获得 200
【发布时间】: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.Fileobject 并且您期待一个界面。你几乎肯定需要坚持通过具体的课程。在您的调用者方法中将e.File 转换为myfileclass,并在您的控制器中期待myfileclass

标签: blazor blazor-webassembly asp.net-web-api-routing


【解决方案1】:

到目前为止,在 Blazor 中,我发现您需要一个 JWT 或替代方案,以便服务器和客户端相互通信。

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

请注意,下面的删除是不安全的,我不确定将其删除的后果。否则,您必须实现某种AUTH提供商,我使用Auth0来解决此问题。

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

【讨论】:

    猜你喜欢
    • 2021-04-20
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2019-12-12
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多