使用FromBody将变量发送到Web API方法 - C#

时间:2016-04-29 17:32:28

标签: c# asp.net-web-api

我正在创建一个调用存储库中方法的WebApi方法。存储库方法调用存储过程并发送4个输入,输出是字符串。我在web api中有问题如何将输入变量发送给它以及URI是什么样的。

这是存储库方法:

公共异步任务AddUserAsync(AddUser用户)    {        return await this.Context.AddUserAsync(user);    }

这是Web API方法:我必须使用[FromBody]如何使用它如何将输入变量发送到此方法?我可以用PostMan进行测试吗?

[HttpPost]
[Route("AddUser/{user}")]
public async Task<string> AddUser([FromBody]AddUser user)
{
    return  Exception = await Repository.AddUserAsync(user);
}

这是用户对象:

[DataContract]
public class AddUser
{      
    [DataMember]
    public string UserEmailAddress { get; set; }

    [DataMember]
    public string PasswordHash { get; set; }

    [DataMember]
    public string Salt { get; set; }

    [DataMember]
    public string RemoteRefNumber { get; set; }
}

我想知道User对象如何从API到Repository?还有什么是我尝试过的URI,但是当我调试时用户是空的:

http://localhost:59509/Adduser/user?UserEmailAddress=test@yahoo.com&PasswordHash=abc&Salt=123&RemoteRefNumber=foo

2 个答案:

答案 0 :(得分:0)

如果您发布,则数据应该是具有键值对的请求正文的一部分。根据您的网址,您似乎使用了GET。

[HttpPost, Route(Name = "create:account"), Authorize(Roles = Account.Editor)]
public async Task<IHttpActionResult> Create(Account acc)


$.ajax(
    url: "",
    type: "post",
    dataType:"json",
    data: { 
        userEmailAddress  : "test@test.com"
    }
)

答案 1 :(得分:0)

您已将其设置为GET请求,其中参数通常作为URL查询字符串参数注入。

帖子的工作方式不同。您提交了一个包含输入和值集合的表单,这将自动发送到请求正文中。

试试这个:

[HttpPost]
[Route("AddUser")]
public async Task<string> AddUser(AddUser user)
{
    return  Exception = await Repository.AddUserAsync(user);
}

在客户端,您只需将表单操作设置为控制器操作URL并使用Post类型。

此外,最好将表单/视图基于ViewModel并在控制器操作上接受此操作。然后,您将其映射/转换为数据模型实体。