首页 > 解决方案 > C# Web Api 传递日期时间参数

问题描述

我有一个 api,我在这里发送多个参数。网址如下。

http://localhost:7150/api/logLoginDetails/GetLogLoginDetails?userId=&userIp=192.168.2.1&startTime=22.9.2020 18:07:13&endTime=23.9.2020 18:07:13

但是当我切换到api时,只有userIp信息来了。userId字段应该为null,但是我应该怎么做才能确保包含datetime的字段不为null。

在下面的方法中,只填写了userIp信息。

 [RoutePrefix("api/logLoginDetails")]
    public class LogLoginDetailsController : ApiBaseController
    {
     [HttpGet, Route ("GetLogLoginDetails")]
             public HttpResponseMessage GetLogLoginDetails (int? userId = null, string userIp = null, DateTime? startTime = null, DateTime? endTime = null)
             {
                 try
                 {
                     return CROk (logLoginDetailsService.GetLogLoginDetails (userId: userId, userIp: userIp, startTime: startTime, endTime: endTime));
                 }
                 catch (Exception e)
                 {
                     return CRException (e);
                 }
             }
         }

标签: c#datetimeasp.net-web-api

解决方案


我相信问题与您用来传递这些值的日期格式有关。日期部分和小时部分之间的空格被替换为 %20 并且生成的文本无法解析为日期时间。

您可以尝试使用这种格式:YYYY-MM-DDTHH:mm:SS

像这样:

http://localhost:7150/api/logLoginDetails/GetLogLoginDetails?userId=&userIp=192.168.2.1&startTime=2020-09-22T18:07:13&endTime=2020-09-23T18:07:13

或者,如果您真的需要使用该格式,也许您可​​以将类型更改为字符串。像这样:

public HttpResponseMessage GetLogLoginDetails(int? userId = null, string userIp = null, string startTime = null, string endTime = null)
{
    try
    {
        return CROk(logLoginDetailsService.GetLogLoginDetails(userId: userId, userIp: userIp, startTime: startTime, endTime: endTime));
    }
    catch (Exception e)
    {
        return CRException(e);
    }
}

推荐阅读