【发布时间】:2017-05-31 16:03:20
【问题描述】:
我有 Webapi 服务控制器,它支持两种按参数区分的 get 方法
控制器
public class DailyRecordController : BaseApiController
{
private IDailyBroadcastRepository _repo;
public DailyRecordController(IDailyBroadcastRepository repo)
{
_repo = repo;
}
public IQueryable<DailyBroadcast> Get(DateTime? date=null)
{
var dailyBroadcastList = new List<DailyBroadcast>();
try
{
dailyBroadcastList = _repo.GetDailyBroadcastByDate(date??DateTime.Now).ToList();
}
catch (Exception ex)
{
//Log
}
return dailyBroadcastList.AsQueryable();
}
public DailyBroadcast Get(int? Id)
{
var dailyBroadcast = new DailyBroadcast();
try
{
dailyBroadcast = _repo.GetDailyBroadcastById(Id);
}
catch (Exception ex)
{
//Log
}
return dailyBroadcast;
}
}
配置
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
当调用api/DailyRecord/2017-06-01 时,它会命中带有id:integer 方法的方法,永远不会命中带有日期时间参数的方法。
我也尝试过路由属性但不受影响。
[HttpGet]
[Route("{date:datetime}")]
事实上,当我用 id 参数commnet第二个方法时,服务返回The requested resource does not support http method 'GET'
如何使用两个同时支持日期时间和整数参数的 Get 方法构建此控制器?
【问题讨论】:
-
我认为你做不到。您需要有单独的方法名称。尝试为具有 [HttpGet] 属性的方法命名。
-
我想我可以做到这一点,我曾经让我这样想的视频课程。
-
@ibubi,您应该添加您的解决方案作为您自己问题的答案。这样一来,那些发现您的解决方案有助于解决类似问题的人就会对您给予奖励。
标签: asp.net-mvc asp.net-web-api asp.net-web-api2