You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Server表单提交API端点时出现POST错误排查

Blazor Server表单提交POST错误排查与解决

在Blazor Server环境下,尝试从.razor页面提交表单到自定义API控制器端点时,出现如下POST错误:

POST请求未指定要提交的表单。解决方法:确保表单元素带有@formname属性并设置唯一值,或在使用对应组件时传递FormName参数。

已尝试将OnSubmit替换为OnValidSubmit、为表单添加@formname参数等常规修复手段,均未解决问题。

页面代码(/test.razor)

@page "/test"
@rendermode InteractiveServer

@inject HttpClient Http

<EditForm @formname="myForm" Model="formData" OnValidSubmit="HandleValidSubmit">
    <InputText @bind-Value="formData.Text" class="form-control" />
    <button type="submit" class="btn btn-primary">Submit</button>
</EditForm>

@if (!string.IsNullOrEmpty(message))
{
    <p>@message</p>
}

@code {
    private FormData formData = new();
    private string? message;

    private async Task HandleValidSubmit()
    {
        var response = await Http.PostAsJsonAsync("/api/command", formData);
        message = response.IsSuccessStatusCode ? "Success!" : "Failure.";
    }

    public class FormData
    {
        public string Text { get; set; } = string.Empty;
    }
}

API控制器代码

using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class TestController : ControllerBase
{
    [HttpPost]
    public IActionResult PostCommand([FromBody] CommandData data)
    {
        // Do something with the data
        return Ok(new { status = "received", receivedText = data.Text });
    }

    public class CommandData
    {
        public string Text { get; set; } = string.Empty;
    }
}

最终解决方案

经过排查,问题根源在于App.razor页面存在重复渲染组件的标记,导致页面始终同时存在两个表单。移除App.razor中重复的组件渲染代码后,表单提交恢复正常。


内容的提问来源于stack exchange,提问作者Displaza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:07:33