删除.net webApi中不带id参数的请求

时间:2018-11-27 11:30:30

标签: c# angular asp.net-web-api

我有如下所示的.net核心WebApi。而且它运行良好。但是,当我写[HttpDelete]而不是[HttpDelete("{id}")]时,它不起作用。可能是什么原因?

我的网址:http://localhost:5004/api/Student/DeleteStudent/23

[ApiController]
[Route("api/[controller]/[action]")]
public class StudentController : ControllerBase
{
    //[HttpDelete] ///////////////// This is not working
    [HttpDelete("{id}")] /////////// This is working
    public async Task<ServiceResult> DeleteStudent(int id)
    {
      return await studentService.DeleteStudent(id);
    }
}

2 个答案:

答案 0 :(得分:4)

如果没有{id}路由模板参数,则填充值的唯一其他方法是通过查询字符串

http://localhost:5004/api/Student/DeleteStudent?id=23 

路由表会将querystring参数与action参数匹配以进行匹配。

无论哪种方式,都需要提供id才能知道要调用的操作和要删除的记录。

答案 1 :(得分:0)

您必须告诉路由器您的api签名。.现在,将[HttpDelete("{id}")]替换为[HttpDelete],您的签名就变成api/[controller]/[action],因此路由器将忽略该签名之后的任何内容。

如果您希望将自定义路由保留为[HttpDelete],则可以在其中定义ID作为参数。