在网络中使用 Route 属性的可选日期参数 API

Optional date parameter using Route attribute in web API

我想要我的 API 方法有两个端点:

api/bids/

api/bids/{yyyy-MM-dd}

在第一种情况下,我会将未定义的日期映射为今天

我试过这样做,但是没有成功:

    [RoutePrefix("api/bids")]
    public class BidsController : ApiController
    {

        [HttpGet, Route("api/bids/{dateTime?}")]
        public async Task<IHttpActionResult> GetBids(DateTime? dateTime = null)
        {

            var correctDate = (dateTime != null) && (dateTime.Value >= DateTime.Now.Date);
            DateTime date = correctDate ? dateTime.Value : DateTime.Now.Date;

            try
            {
                return Ok(date);
            }
            catch (Exception ex)
            {
                string errorMessage = ex.Message;
                return BadRequest(errorMessage);
            }

        }
    }

在我的案例中,我如何使用带有属性路由的可选日期参数?

您需要在路由中使您的参数可选以及默认的空分配:

您的端点路由也需要更改为不包含 api/bids

[RoutePrefix("api/bids")]
public class BidsController : ApiController
{
    [HttpGet, Route("{dateTime:DateTime?}")]
    public async Task<IHttpActionResult> GetBids(DateTime? dateTime = null)
    {

        var correctDate = (dateTime != null) && (dateTime.Value >= DateTime.Now.Date);
        DateTime date = correctDate ? dateTime.Value : DateTime.Now.Date;

        try
        {
            return Ok(date);
        }
        catch (Exception ex)
        {
            string errorMessage = ex.Message;
            return BadRequest(errorMessage);
        }

    }
}

为了阅读方便,我改了这行

[HttpGet, Route("api/bids/{dateTime?}")]

至此

[HttpGet, Route("{dateTime:DateTime?}")]