Asp.net web api 如何使用axios访问Web API GET方法?
我尝试从axios调用asp.net core 2.1 webapi webapi控制器Asp.net web api 如何使用axios访问Web API GET方法?,asp.net-web-api,vue.js,asp.net-core,axios,Asp.net Web Api,Vue.js,Asp.net Core,Axios,我尝试从axios调用asp.net core 2.1 webapi webapi控制器 [Route("api/[controller]")] [ApiController] [HttpsRequirement(SslRequirement.Yes)] public class GHTKController : ControllerBase { [HttpGet("GetShippingFee")] [Produces("
[Route("api/[controller]")]
[ApiController]
[HttpsRequirement(SslRequirement.Yes)]
public class GHTKController : ControllerBase
{
[HttpGet("GetShippingFee")]
[Produces("application/json")]
public async Task<IActionResult> GetShippingFee([FromBody]GhtkAddress address)
{
return Ok();
}
}
但是,它无法使用VueJs从axios运行,并返回状态400
import axios from 'axios'
export default {
async getShippingFee(address) {
console.log(address)
const request = await axios.get('/api/ghtk/getshippingfee', {
pick_province: "asda"
})
.then(response => response)
.catch(error => {
console.log(error)
});
return request;
},
}
您当前的动作方法参数由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);
}
上面的代码将进行Http POST调用,并在请求正文中发送您的数据。由于我们正在进行POST调用,请确保您的操作方法使用HttpPost属性修饰
[HttpPost("GetShippingFee")]
[Produces("application/json")]
public async Task<IActionResult> GetShippingFee([FromBody]Profile address)
{
return Ok(address);
}
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
})
[HttpPost("GetShippingFee")]
[Produces("application/json")]
public async Task<IActionResult> GetShippingFee([FromBody]Profile address)
{
return Ok(address);
}