【问题标题】:Using FromBody to send variable to web API method - C#使用 FromBody 将变量发送到 Web API 方法 - C#
【发布时间】:2016-08-24 23:14:15
【问题描述】:

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

这是存储库方法:

公共异步任务 AddUserAsync(AddUser 用户) { 返回等待 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 是什么,但调试时用户为 Null:

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

【问题讨论】:

  • 您使用什么类型的客户端来请求您的服务器?

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


【解决方案1】:

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

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

试试这个:

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

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

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

【讨论】:

    【解决方案2】:

    如果您发布,数据应该是带有键值对的请求正文的一部分。根据您的 URL,您似乎在使用 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"
        }
    )
    

    【讨论】:

    • 我现在用的是post,但是post的时候用户是空的。
    • 您可以使用监视 HTTP 消息并查看发布的内容。使用 fiddler 或 firebug 并监控网络流量。
    • 在webapi中,复杂的对象是从body中拉出来的。所以不需要FromBody。如果您的 GET 操作采用复杂对象,则需要 FromUri 属性。
    • 如何使用不在 URI 中的 [FromBody] 发送它。
    • WebApi 将为您完成。它是参数绑定算法的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多