[英]How to obtain same routing logic for ApiControllers as regular Controllers in ASP.NET MVC 4?
我开始使用一个控制器,该控制器采用如下过滤参数:
public class CampaignsController : Controller
{
public ActionResult List(string searchstring, string pid, string country, string vertical, string traffictype)
{
var query = db.Campaigns;
if(!string.IsNullOrWhiteSpace(country))
{
query = query.Where(c => c.CountryCode == country);
}
// and so on...
var viewModel = new CampaignListViewModel { Campaigns = query.ToList(); }
return View(viewModel);
}
}
我喜欢的是,即使某些参数为null,也将动作映射到它。
然后,我转换为Ajax样式,发现ApiController可以方便地生成所需的JSON响应。
但是,我发现, 所有参数都需要在查询字符串中显示,以便路由与Action匹配。
这是该示例代码:
public class CampaignsApiController : ApiController
{
public IQueryable<CampaignViewModel> Get(string vertical, string traffictype, string search, string country, int? pid)
{
var campaigns = db.Campaigns.AsQueryable();
if (!string.IsNullOrWhiteSpace(vertical))
{
var cr = db.Verticals.Where(v => v.Name == vertical).FirstOrDefault();
if (cr != null)
campaigns = campaigns.Where(c => c.Vertical.Name == vertical);
}
// and so on...
var query = campaigns.AsEnumerable()
.Select(c => new CampaignViewModel(c))
.AsQueryable();
return query;
}
}
是否可以为ApiController获得相同的行为?
或者,是否可以将我的设计方法或我使用ApiController的方式修改为将ApiController默认行为与我追求的结果结合起来?
这是两个类的要点供参考。
尝试为可能缺少的参数输入一些默认值,例如
public IQueryable<CampaignViewModel> Get(string vertical = null, string traffictype = null, string search = null, string country = null, int? pid = null) {
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.