我刚刚为本地项目创建了我的第一个api,但我遇到了另一个条款。
目前可以访问我的api,例如/api/{StartDate}/{EndDate}
因此可以导航它,例如www.site.com/details/201001010000/201601010000
但是,现在我需要/api/details?StartDate={startDate}&EndDate={endDate}
目前我的代码是:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{StartDate}/{EndDate}",
defaults: new { StartDate = RouteParameter.Optional, EndDate = RouteParameter.Optional }
);
[HttpGet]
[Route("")]
[Route("{StartDate}/{EndDate}")]
[ResponseType(typeof(Detail))]
public IHttpActionResult GetDetail(string StartDate, string EndDate)
{
DateTime StartDateTime = DateTime.ParseExact(StartDate, "yyyyMMddhhmm", null);
DateTime EndDateTime = DateTime.ParseExact(EndDate, "yyyyMMddhhmm", null);
IEnumerable<ConvertedDetails> detail = db.Details.Where(a => a.callDate >= StartDateTime && a.callDate <= EndDateTime).RestOfLongQuery;
if (detail.Any())
{
return Ok(ResponseTrue);
}
return Ok(ResponseFalse);
}
答案 0 :(得分:1)
问题在于如何在操作上映射HTTP属性路由和Route属性。您可以使用默认的http路由来解决此问题,这会阻止StartDate
和EndDate
成为URL的一部分而不是参数:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
您也不需要控制器上的Route属性,因此它看起来像这样:
[HttpGet]
[ResponseType(typeof(Detail))]
public IHttpActionResult GetDetail(string StartDate, string EndDate)
{
DateTime StartDateTime = DateTime.ParseExact(StartDate, "yyyyMMddhhmm", null);
DateTime EndDateTime = DateTime.ParseExact(EndDate, "yyyyMMddhhmm", null);
IEnumerable<ConvertedDetails> detail = db.Details.Where(a => a.callDate >= StartDateTime && a.callDate <= EndDateTime).RestOfLongQuery;
if (detail.Any())
{
return Ok(ResponseTrue);
}
return Ok(ResponseFalse);
}
这样您就可以使用以下URL访问操作:
www.site.com/api/details?StartDate=201001010000&EndDate=201601010000