我正在尝试支持GET和POST的webapi,但POST方法需要传递一个字母数字参数但是GET应该忽略任何参数。
[HttpPost]
[HttpGet]
[Route("payment")]
public virtual async Task<HttpResponseMessage> PaymentBase([FromBody] string hostOtp)
{
return await ((IApiPaymentController)this).Payment(hostOtp);
}
我试过了,
PaymentBase([FromBody] string hostOtp)
和PaymentBase([FromBody] string hostOtp="")
PaymentBase(string hostOtp="")
使用这种方法PaymentBase(string hostOtp="")
GET工作正常,但使用POST hostOtp永远不会被绑定。
这是邮递员代码,
var settings = {
"async": true,
"crossDomain": true,
"url": "http://localhost:5094/api/payment/Payment",
"method": "POST",
"headers": {
"securitytoken": "0WnIxDep1knex1P13FmTWFKmIOBhgyc",
"content-type": "application/x-www-form-urlencoded",
"cache-control": "no-cache",
"postman-token": "123d6825-c723-732d-737c-1964dd8f271f"
},
"data": {
"hostOtp": "eqweef"
}
}
$.ajax(settings).done(function (response) {
console.log(response);
});
从邮递员开火时[FromBody] string hostOtp
收到错误,
“没有MediaTypeFormatter可用于读取'String'类型的对象 来自媒体类型'application / octet-stream'的内容。“
答案 0 :(得分:0)
当您在请求正文中发布原始类型时,您需要在帖子中用双引号包装字符串值
"data": '"eqweef"'
或者如果值来自变量
"data": '"' + hostOtp + '"'
此外,您需要使用[FromBody]
显式声明参数在请求正文中,我看到您这样做了。
[FromBody] string hostOtp