【发布时间】:2014-05-03 22:01:02
【问题描述】:
我们使用 ASP.Net Web API 来生成提要,它包括分页功能。
myfeed.com/afeed?page=2
我的老板说“让我们也允许用户使用‘分页’,因为这是 WP 使用的。”此外,我们还在一些较旧的提要中使用 pageIndex。所以我想做的就是接受这三个。
myfeed.com/afeed?page=2
myfeed.com/afeed?paged=2
myfeed.com/afeed?pageIndex=2
我想做的是能写一个干净的Web API方法,比如
public Foo Get(int page = 1)
{
//do some stuff
return foo;
}
不会使方法与页面“管道”混淆。所以我尝试创建一个 ActionFilter
public override void OnActionExecuting(HttpActionContext actionContext)
{
object pageParam = new object(); //query["page"]
if (pageParam == null)
{
var altPageParam = GetPageParamUsingAlternateParams(actionContext);
if (altPageParam != null){}
//SetPageParam here
}
base.OnActionExecuting(actionContext);
}
private object GetPageParamUsingAlternateParams(HttpActionContext actionContext)
{
object result = new object();
object pageIndexParam = new object(); //Query["pageIndex"]
object pagedParam = new object(); ////Query["paged"]
if (pagedParam != null)
result = pagedParam;
else if (pageIndexParam != null)
result = pageIndexParam;
return result;
}
我没有说完。当我在寻找获取查询参数的最佳方法时,我偶然发现了一个大错误!
OnActionExecuting 在int page = 1 之后执行。当然,我可以在 ActionFilter 中覆盖它,但这会导致混乱。我真的希望能够通过来自
page -> paged -> pageIndex -> 方法中的默认值
我发现了很多关于自定义绑定到对象的文章。此外,我还找到了有关“参数绑定”的文章,但这些文章涉及 FromUri 和 FromBody。我没有发现任何我认为与我所面临的事情直接相似的事情。
【问题讨论】: