如何将简单值从 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&lt;ActionResult&gt; 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

Axios Post 请求发送未定义

axios发送post请求,如何提交表单数据?

axios如何一次性发送多个网络请求?

如何检索由axios post请求发送的php中的变量[重复]

Laravel:如何将值从控制器发送到模型?