C# Web API中DELETE请求传递多个参数失败求助
在C# Web API的DELETE请求中传递多个参数的解决方案
看起来你在通过QueryString传递DELETE参数时遇到了绑定问题,我来帮你梳理几个可行的解决办法,同时指出你当前请求里的小问题。
首先修正你的请求URL
你当前的URL里id3="2018-03-14"带了引号,这会导致日期参数解析失败——QueryString里的参数值不需要加引号,应该改成id3=2018-03-14,这是第一个需要调整的地方。
接下来针对你的控制器,提供两种常见的参数绑定方案:
方案1:直接使用独立的QueryString参数
如果你的Delete Action需要几个独立参数,可以给每个参数加上[FromUri]特性,明确告诉Web API从URL的QueryString中读取这些参数。示例代码如下:
public class TaskController : ApiController { // 假设你的TaskPersistent是数据持久层类 private readonly TaskPersistent _taskPersistent = new TaskPersistent(); [HttpDelete] public IHttpActionResult DeleteTask([FromUri] int id1, [FromUri] int id2, [FromUri] DateTime id3) { // 调用TaskPersistent的删除逻辑,比如: var result = _taskPersistent.Delete(id1, id2, id3); if (result) return Ok("删除成功"); else return NotFound(); } }
调整后的请求URL:http://localhost:10927/api/Task?id1=1&id2=5&id3=2018-03-14
方案2:用DTO类封装参数(推荐参数较多时使用)
如果参数数量较多,或者后续可能扩展参数,用一个DTO(数据传输对象)来封装会更整洁,也便于维护。
首先定义一个DTO类:
public class DeleteTaskRequest { public int Id1 { get; set; } public int Id2 { get; set; } public DateTime Id3 { get; set; } }
然后修改控制器的Action:
public class TaskController : ApiController { private readonly TaskPersistent _taskPersistent = new TaskPersistent(); [HttpDelete] public IHttpActionResult DeleteTask([FromUri] DeleteTaskRequest request) { // 检查参数是否有效 if (request == null) return BadRequest("参数不能为空"); var result = _taskPersistent.Delete(request.Id1, request.Id2, request.Id3); return result ? Ok("删除成功") : NotFound(); } }
请求URL和方案1一样,Web API会自动把QueryString里的参数绑定到DeleteTaskRequest对象的对应属性上。
可选方案:使用路由参数传递
如果你更倾向于把参数放在路由路径里(而不是QueryString),可以自定义Web API路由。
在WebApiConfig.cs里添加一条路由规则:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // 其他路由规则... config.Routes.MapHttpRoute( name: "DeleteTaskRoute", routeTemplate: "api/Task/{id1}/{id2}/{id3}", defaults: new { controller = "Task", action = "DeleteTask" } ); } }
然后控制器Action可以去掉[FromUri]:
[HttpDelete] public IHttpActionResult DeleteTask(int id1, int id2, DateTime id3) { // 处理逻辑同上 }
此时请求URL会变成:http://localhost:10927/api/Task/1/5/2018-03-14
额外注意事项
- 日期格式:默认情况下,Web API可以解析
yyyy-MM-dd格式的日期,如果你的日期格式不同,可能需要在Web API配置中添加自定义的日期格式化规则。 - 参数大小写:Web API默认支持参数名称的大小写不敏感匹配,所以URL里的
id1和Action里的id1(或者DTO里的Id1)都能正确绑定。
内容的提问来源于stack exchange,提问作者Gamma
相关产品推荐
相关产品推荐

