我有一个看起来像这样一个jQuery的方法:发布至网络API参数为null
$.post("/api/amazon/signature", { "policy": policy }, function (data) {
console.log(data);
});
API方法看起来像这样〜:
// POST api/amazon/signature
[HttpPost]
[Route("api/amazon/signature")]
public IHttpActionResult GetSignature([FromBody]string policy)
{
var bKey = Encoding.ASCII.GetBytes(ConfigurationManager.AppSettings["AWSSecretKey"]);
var hmacSha1 = new HMACSHA1(bKey);
var bPolicy = Encoding.ASCII.GetBytes(policy);
var hash = hmacSha1.ComputeHash(bPolicy);
var encoded = Convert.ToBase64String(hash);
return Ok(encoded);
}
但是当我运行这段代码政策始终为空! 如果我改变我的方法是:
public class Signature
{
public string Policy { get; set; }
}
// POST api/amazon/signature
[HttpPost]
[Route("api/amazon/signature")]
public IHttpActionResult GetSignature([FromBody]Signature model)
{
var bKey = Encoding.ASCII.GetBytes(ConfigurationManager.AppSettings["AWSSecretKey"]);
var hmacSha1 = new HMACSHA1(bKey);
var bPolicy = Encoding.ASCII.GetBytes(model.Policy);
var hash = hmacSha1.ComputeHash(bPolicy);
var encoded = Convert.ToBase64String(hash);
return Ok(encoded);
}
和修改我的jQuery这样的:
$.post("/api/amazon/signature", { "Policy": policy }, function (data) {
console.log(data);
});
它工作得很好....
有人能告诉我为什么吗?
感谢您的详细解释 – r3plica