asp.net webapi 2 Значения параметров сообщения всегда равны нулю (строка) или 0 (целое число)

Прошел десятки ссылок, все говорят об одном и том же решении. Создайте объект для параметра в вызове API. И передайте тот же самый объект, используя json.

Таким образом, вызов API (который был поражен):

[System.Web.Http.HttpPost]
public Microsoft.AspNetCore.Mvc.JsonResult SearchItems([FromBody]SearchParams searchParams)

Входной объект определяется следующим образом:

public class SearchParams
  {
    public string searchWord { get; set; }

    public int anid { get; set; }
  }

Вызов осуществляется таким образом:

let item = {
          searchWord: searchKeyword.value.trim(),
          anid: 1
      };

      const uri = "../../WebApi/SearchItems";

      fetch(uri, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Accept': 'application/json'
        },
        body: JSON.stringify(item),
        //credentials: 'include',
        mode: 'cors',
      })

Посмотрите на сетевой трафик, переданные заголовки:

:authority: localhost:44386
:method: POST
:path: /WebApi/SearchItems
:scheme: https
accept: application/json
accept-encoding: gzip, deflate, br
accept-language: en-GB,en-US;q=0.9,en;q=0.8
content-length: 32
content-type: application/json
cookie: .AspNetCore.Session=CfDJ8LGmdU3gpbZIvSkveH0x8cMT8VibUQlc07yQ8SJOo6DJkNqykRsAz2V6NVuQ5zQhzBNiHjZ2iRJc%2Fno44sQdQJhsVPnktzx8EWu%2Bptg9ONjmErDP3TZ1csme%2FAJ3H5hSgvooxH0snE00och2ov4ZldFCosHYGH6X70ESjL8PbcJg; .AspNetCore.Antiforgery.Q2hy0CiNRlg=CfDJ8LGmdU3gpbZIvSkveH0x8cOOBFRZOyah2508xPXIUjTbV_weFLdM06pME-M-kc2l48FOmSym_5JS9GUHJeciQEKJI9SHBu1D-5wLcVF4de3rYsjKRsI67qGrCado7eBFDBAbeYFOLWEMbXXCQr_0vlA
origin: https://localhost:44386
referer: https://localhost:44386/lb_users/Details/11
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36

Таким образом, полезная нагрузка:

{"searchWord":"qwerty","anid":1}

И мой отладчик VS, и Postman возвращают значения null/0.

Относительно новый для ядра .net. Итак, какую фундаментальную вещь мне здесь не хватает, поскольку десятки SO-вопросов, на которые я смотрел, кажутся идентичными тому, что я добавил к своему решению?

Заранее спасибо.

РЕДАКТИРОВАТЬ: это работает.

const uri = "../../WebApi/SearchItems";
      fetch(uri, {
        method: 'POST',
        headers: {
          "Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
        },
        body: "searchWord=" + searchKeyword.value.trim() + "&anid=1",
        //credentials: 'include',
        mode: 'cors',
      })

Таким образом, может показаться, что проблема в JSON. Были ли объекты JSON удалены от передачи в вызовы API?


person stumcc    schedule 23.11.2020    source источник


Ответы (1)


Я тестирую asp .net webapi2 и asp .net core, оба могут работать. Вот демонстрация asp .net webapi2:

АпиКонтроллер:

public class ValuesController : ApiController
    {
        [System.Web.Http.HttpPost]
        public string GetVal(SearchParams searchParams)
        {
            return "success";
        }
    }
    public class SearchParams
    {
        public string searchWord { get; set; }

        public int anid { get; set; }
    }

аякс:

<input id="searchWord"/>
<button onclick="sendData()">ssss</button>
<script>
    function sendData() {
        let item = {
            searchWord: $("#searchWord").val().trim(),
            anid: 1
        };

        const uri = "../api/Values";

        fetch(uri, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Accept': 'application/json'
            },
            body: JSON.stringify(item),
            //credentials: 'include',
            mode: 'cors',
        })
    }
</script>

заголовки:

:authority: localhost:44383
:method: POST
:path: /api/Values
:scheme: https
accept: application/json
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
content-length: 33
content-type: application/json
cookie: .AspNetCore.Culture=c%3Den-US%7Cuic%3Den-US; .AspNetCore.Antiforgery.I5tvYLHG_pU=CfDJ8AkZmG9N6OhEnYVb3Xy31rQgFnXqHPkWTaV4nUodZGM9SfyhvD5jztl-kzo768oHkGPUYV-bOoSNBP5OuTHO_yd08w-IxrsO39HceHJgOIqC5ePYLIxXd0w9cBzYeWEu5amihQhOqiLySw376bp9YdM
origin: https://localhost:44383
referer: https://localhost:44383/Home/Index1
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36

полезная информация:

{searchWord: "hghgfgf", anid: 1}

результат: введите здесь описание изображения Вы также можете попробовать создать новый проект и протестировать его.

person Yiyi You    schedule 24.11.2020