Ваш текущий параметр метода действия украшен атрибутом FromBody
.Это сообщает связующему модели, что он должен прочитать данные из тела запроса и выполнить сопоставление в процессе связывания модели.Но из вашего клиентского кода вы делаете вызов GET, в котором ваши данные будут отправляться в URL-адресе запроса в качестве параметров строки запроса.Если вы проверяете свой сетевой вызов, вы можете увидеть его, как показано ниже
/api/ghtk/getshippingfee?pick_province=asda
Поскольку вы делаете вызов GET, вы должны использовать атрибут FromQuery
.Атрибут FromQuery
указывает связующему модели прочитать данные из строки запроса и выполнить сопоставление.
[HttpGet("GetShippingFee")]
[Produces("application/json")]
public async Task<IActionResult> GetShippingFee([FromQuery]Profile address)
{
return Ok(address);
}
или
Если вы хотите отправитьсложный объект, рассмотрите возможность вызова POST из кода на стороне клиента.Вам необходимо преобразовать ваш сложный объект JavaScript в его строковую версию JSON и отправить его в качестве данных для вызова POST.Убедитесь, что вы указали application/json
в качестве заголовка Content-Type
для вызова.Вы можете использовать метод post
для axios.
const url = '/api/ghtk/getshippingfee';
const ajaxHheaders = {
'Content-Type': 'application/json',
};
let data = JSON.stringify({
pick_province: "redmond",
first_name: "shyju"
});
const request = await axios.post(url, data, {
headers: ajaxHheaders
})
Приведенный выше код выполнит вызов POST Http и отправит ваши данные в теле запроса.Поскольку мы выполняем вызов POST, убедитесь, что ваш метод действия имеет атрибут HttpPost
.
[HttpPost("GetShippingFee")]
[Produces("application/json")]
public async Task<IActionResult> GetShippingFee([FromBody]Profile address)
{
return Ok(address);
}