【发布时间】:2015-05-13 22:58:41
【问题描述】:
我在 ApiController 子类控制器中有 2 个 asp.net web api 操作。两种操作方法是 POST。一种方法是使用非空请求正文。但其他操作方法总是得到空请求正文。我不知道第二个 POST 操作不起作用的原因。请帮忙。
以下 POST 操作方法适用于非空请求正文绑定:方法签名中的参数“model”已正确绑定。
[HttpPost]
[Route("create/{sessionid:guid}")]
public HttpResponseMessage CreateAccount(Guid sessionid, UserAccountDto model)
{
var result = new HttpResponseMessage(HttpStatusCode.OK);
return Request.CreateResponse(HttpStatusCode.OK, model);
}
Dto class:
public class UserAccountDto
{
public long? AccountId { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string Salt { get; set; }
public string PlainTextPassword { get; set; }
}
Call with API by using Advanced Rest Client tool plugged in Chrome
POST http://localhost:55540/guests/create/13DD8111-8A00-48CE-997F-28EE3C88895D
{
email:"meme@me.com",
password:"fkdld",
salt:"salt",
plaintextpassword :"abc"
}
第二个 ApiController POST 操作方法不起作用。方法动作中的参数“model”始终为空;由于某种原因没有正确绑定。
[HttpPost]
[Route("convert/{sessionid:guid}")]
public IHttpActionResult ConvertAccount(Guid sessionid, LinkedAccountThinDto model)
{
var accountType = model.AccountType;
var accountKey = model.AccountKey;
return Ok();
}
自定义 Dto 类:
public class LinkedAccountThinDto
{
public string AccountType { get; set; }
public string AccountKey { get; set; }
}
使用 Chrome 中的 Advanced Rest Client 工具调用 API
POST http://localhost:55540/guests/convert/13DD8111-8A00-48CE-997F-28EE3C88895D
{
accounttype: “abcdf”,
accountkey: “1234567”
}
【问题讨论】:
-
您是否尝试过针对 LinkedAccountThinDto 方法参数指定 [FromBody]?
-
是的,我已经尝试过[FromBody],但是没有解决空绑定的问题。
-
我不禁注意到您的第二个示例中的引号与第一个示例中的字符串引号不同。
-
您是否尝试过更改大小写,例如
AccountType而不是accounttype。 -
您能否在调试时检查
Request对象,看看两个请求是否来自相同?
标签: c# asp.net-web-api asp.net-web-api2