Blazor Post和Response C#

问题描述 投票:2回答:1

在服务器端Blazor webapp中将问题从客户端发布到服务器。

我在共享库中创建了两个简单的类:

public class CommandRequest
{
    public int RequestNumber { get; set; }
}

public class CommandResponse
{
    public int ResponseNumber { get; set; }
}

我的客户端代码:

@if (response == null)
{
    <p>Loading...</p>
}
else
{
    <p>@response.ResponseNumber</p>
}

@functions {
    CommandResponse response;

    protected override async Task OnInitAsync()
    {
        var request = new CommandRequest() {RequestNumber = 3};
        response = await Http.SendJsonAsync<CommandResponse>(HttpMethod.Post,"api/SampleData/ProcessRequest", request);
    }
}

我的服务器端请求处理程序

    [HttpPost("[action]")]
    public CommandResponse ProcessRequest(CommandRequest request)
    {
        return new CommandResponse() { ResponseNumber = request.RequestNumber * 2 };
    }

当我调试这个时,ProcessRequest方法总是传递一个空对象,request.RequestNumber是0.我是ASP.NET和Blazor的新手,我做错了什么?

c# blazor blazor-server-side asp.net-core-3.0
1个回答
3
投票

将[FromBody]属性添加到CommandRequest参数解决了我的问题:

    [HttpPost("[action]")]
    public CommandResponse ProcessRequest([FromBody] CommandRequest request)
    {
        return new CommandResponse() { ResponseNumber = request.RequestNumber * 2 };
    }

这里有一个参考:What is the function of [FromBody] Attribute in C#?

© www.soinside.com 2019 - 2024. All rights reserved.