假设这些模型:
public class PagingModel
{
public int Skip { get; set; }
public int Take { get; set; }
}
public class FilterModel
{
public string Filter { get; set; }
}
假设标准路由(基于WebApiConfig.cs中的路由映射)和Web API控制器:
public class ValuesController : ApiController
{
public async Task<IHttpActionResult> Get([FromUri] FilterModel filterModel, [FromUri] PagingModel paging)
{
return Content(HttpStatusCode.OK, "filter=" + filterModel.Filter + ", skip=" + paging.Skip + ", take=" + paging.Take);
}
}
如果我点击http://localhost:12345/api/values(省略查询字符串参数),则输出&#34; filter =,skip = 0,paging = 0&#34; - 因此参数设置为FilterModel和PagingModel的空实例。
现在假设使用相同的控制器,但使用基于属性的路由:
[RoutePrefix("api/testing")]
public class ValuesController : ApiController
{
[Route("")]
public async Task<IHttpActionResult> Get([FromUri] FilterModel filterModel, [FromUri] PagingModel paging)
{
return Content(HttpStatusCode.OK, "filter=" + filterModel.Filter + ", skip=" + paging.Skip + ", take=" + paging.Take);
}
}
如果我现在点击http://localhost:12345/api/testing(再次省略查询字符串参数),我得到一个空引用异常 - filterModel和paging都设置为null。
造成这种差异的原因是什么?这两种路由机制是否以某种方式使用不同的ModelBinder?
答案 0 :(得分:0)
看起来像是一个错字
在第二个示例中,filterModel.filter
,paging.take
和paging.skip
不存在,导致空引用异常。
为什么?因为它是根据你的班级声明过滤,取和跳过