如何将简单值从 axios.post 发送到 asp.net 核心?
Posted
技术标签:
【中文标题】如何将简单值从 axios.post 发送到 asp.net 核心?【英文标题】:How send simple value from axios.post to asp.net core? 【发布时间】:2019-09-17 02:40:42 【问题描述】:使用 axios.post 向我在 asp.net 核心上的控制器发送一个简单的值 int,当发送任何值时,方法控制器接收 value "0"。
使用 axios(发布或删除)发送此类值的正确方法是什么?
PD:我可以使用 [FromBody] 正确发送模型并在控制器上接收
方法控制器:
[Route("Delete"),HttpPost]
public async Task<ActionResult> Delete(int id)
try
var result = await userService.DeleteUserPerson(id);
return Json(new
response=true,
data=result,
error=""
);
catch(Exception ex)
return Json(new
response=false,
data=false,
error=ex.Message
);
来自反应类的方法:
async function DeleteUser(id, props)
var request= new Request();
try
console.log(id);
var axiosResp= await request.axios_request.post('User/Delete', JSON.stringify(id:id));
if(axiosResp.status!=200)
//do smething
//this case validate error
if(axiosResp.data.response && !axiosResp.data.error)
//do something
//do something
catch(err)
//do something
类请求(axios):
export default class Request
constructor()
this.axios_request = axios.create(
baseURL: 'http://localhost:5000/api',
timeout: 5000,
headers: authHeader()
);
【问题讨论】:
【参考方案1】:看起来您正在尝试同时做两件不同的事情。因此,您可以在路由或 HTTP 请求的正文中指定 id。如果它在路由中,则应该调用的 url 是“User/Delete/id”。在这种情况下,您应该在函数“Delete”的 id 参数之前指定 [FromRoute]。像这样(我建议为此使用 HTTP 删除:您可以在此处阅读有关使用 axios 删除的信息:Axios Delete request with body and headers?):
[Route("Delete")]
[HttpDelete]
public async Task<ActionResult> Delete([FromRoute] int id)
如果你想在正文中指定你应该做的 id,就像你自己提到的那样,像这样使用 [FromBody]:
[Route("Delete")]
[HttpPost]
public async Task<ActionResult> Delete([FromBody] int id)
如果你想删除一个模型,那么我建议实际上使用 HTTP 方法 delete 代替。然后,您应该使用装饰器 [HttpDelete] 而不是 [HttpPost],如上所示。
编辑: 此外,我可以看到您正在向控制器发送一个包含参数 id 的对象。尝试仅发送数字或将函数的参数更改为包含 id 的对象,以匹配您在 axios 调用中发送的内容。
这意味着改变这一行:
var axiosResp= await request.axios_request.post('User/Delete', JSON.stringify(id:id));
到:
var axiosResp= await request.axios_request.post('User/Delete', id);
【讨论】:
这种方式不行,为什么?:[Route("Delete"),HttpDelete("id")] public async Task<ActionResult> Delete([FromRoute] int id)
.......... var axiosResp= await request.axios_request.delete('User/Delete', id:id)
您仍在 axios 请求中发送对象。应该是 axious.delete('User/Delete/:id')
无法正常工作:request.axios_request.delete('User/Delete/:id');
因为获取错误:http://localhost:5000/api/User/Delete/:id 404 (Not Found)
您应该将 :id 替换为实际的 id,例如:axios 请求中的 User/Delete/123【参考方案2】:
测试不同的方式,这对我有用:
[Route("Delete/id"),HttpDelete("id")]
public async Task<ActionResult> Delete([FromRoute]int id)
在 axios 上使用 delete:
request.axios_request.post('User/Delete/'+ id);
【讨论】:
也可以使用:request.axios_request.delete('User/Delete/'+ id);
以上是关于如何将简单值从 axios.post 发送到 asp.net 核心?的主要内容,如果未能解决你的问题,请参考以下文章
如何将一组数据从客户端传递到 axios post 请求的 req.body