我在ApiController-subclassed控制器中有2个asp.net web api操作。 POST动作方法有两种。一种方法是使用非null请求体。但是另一个动作方法总是得到null请求体。我不知道第二个POST动作不起作用的原因。请帮忙。
以下POST操作方法在非空请求正文绑定时正常工作:方法签名中的参数“模型”绑定正确。
[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操作方法不起作用。方法操作中的参数“模型”始终为null;由于某种原因它没有被正确绑定。
[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”
}
答案 0 :(得分:0)
正如Stilgar所说,我在使用MS Word而不是Advanced Rest Client工具的文本编辑器为第二个Api动作创建JSON字符串时犯了一个错误。这导致了工具无法理解的创建引号的问题。我直接在工具中重新创建了JSON字符串,问题就解决了。
谢谢你们所有人。
顺便说一下,无论属性键和使用过的引号如何,以下JSON字符串都能正常使用我的第二个Api方法:
{"AccountType": "abcdf","AccountKey": "1234567"}
{"accounttype": "abcdf","accountkey": "1234567"}
{accounttype: "abcdf",accountkey: "1234567"}