webapi上的GET和POST都使用带参数的POST但没有参数的GET

时间:2018-04-24 14:23:04

标签: c# post asp.net-web-api get optional-parameters

我正在尝试支持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'的内容。“

1 个答案:

答案 0 :(得分:0)

当您在请求正文中发布原始类型时,您需要在帖子中用双引号包装字符串值

"data": '"eqweef"'

或者如果值来自变量

"data": '"' + hostOtp + '"'

此外,您需要使用[FromBody]显式声明参数在请求正文中,我看到您这样做了。

[FromBody] string hostOtp