И GET, и POST для webapi с POST с параметром, но GET без параметра - PullRequest
0 голосов
/ 24 апреля 2018

Я пробую webapi, который будет поддерживать как GET, так и POST, но метод 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 голосов
/ 25 апреля 2018

Поскольку вы публикуете примитивный тип в теле запроса, вам нужно будет заключить строковое значение в двойные кавычки в своем сообщении

"data": '"eqweef"'

или если значение поступает из переменной

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

Кроме того, вам нужно явно объявить, что параметр поступает в тело запроса, используя [FromBody], и я вижу, вы это сделали.

[FromBody] string hostOtp
...