修改访问我的 api 的 url
modify the url which accesses my api
我刚刚为本地项目创建了我的第一个 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);
}
问题在于您如何在操作上映射 HTTP 属性路由和路由属性。您可以使用默认的 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
我刚刚为本地项目创建了我的第一个 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);
}
问题在于您如何在操作上映射 HTTP 属性路由和路由属性。您可以使用默认的 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