修改访问我的 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 路由来解决此问题,这将阻止 StartDateEndDate 成为 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