【问题标题】:C# Web Api Pass Datetime Parameter [duplicate]C# Web Api 传递日期时间参数
【发布时间】:2020-09-24 03:06:49
【问题描述】:

我有一个 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);
                 }
             }
         }

【问题讨论】:

  • 你需要用[FromQuery]属性修改你的参数
  • @Eldar 我的项目不是核心项目
  • 您通过查询字符串传递参数并期望在操作参数中具有相同的映射,这些映射会自动映射。您需要从 HttpContext 的 QueryString 中读取它,或者您可以使用 FormQuery 属性。

标签: c# datetime asp.net-web-api


【解决方案1】:

我认为问题与您用于传递这些值的日期格式有关。日期部分和小时部分之间的空格被 %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);
    }
}

【讨论】:

  • 它的工作字符串 _startTime = startTime.HasValue ? startTime.Value.ToString(CultureInfo.InvariantCulture) : "";
  • 对不起,我不关注。你要把那条线放在哪里?
  • 当我传递参数时,我确实使用了_startTime = startTime.HasValue? startTime.Value.ToString (CultureInfo.InvariantCulture): "";并为 api 创建 url
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多