我有如下所示的.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);
}
}
答案 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作为参数。