我正在创建一个调用存储库中方法的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
答案 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并在控制器操作上接受此操作。然后,您将其映射/转换为数据模型实体。