ApiController使用不存在的参数进行路由

时间:2014-11-07 10:39:02

标签: asp.net routing asp.net-mvc-routing asp.net-apicontroller

我有一个像这样的ApiController:

SearchController : ApiController {
  public Book Get(int booksn=-1, string author="")
  {
    /* search for books matching the parameters */
  }
}

所有参数都有默认值,空搜索请求会返回所有内容。

现在我的问题是,如果请求包含其他参数(例如来自API用户的拼写错误),它仍将路由到此函数:

GET /search?booksn=3&hello=world

潜在的问题是如果一个参数以错误的类型发送,它将以相同的方式路由,我不会在方法中获得参数值,所以我甚至不能发送错误响应:

GET /search?booksn=helloWorld

有没有办法防止这种情况发生?要么防止错误的类型,要么防止所有未定义的参数? (我也尝试过一个对象和[FromUri]属性,但同样的问题)

编辑:我正在使用VS 2012与.NET framework 4

2 个答案:

答案 0 :(得分:0)

试试这个:

[HttpGet()]
[Route()]
public Book Get(int booksn=-1, string author="")

如果参数无效,则应阻止请求

答案 1 :(得分:0)

我最终使用字符串参数甚至数字,如果值不正确,使用int.Parse抛出错误。