【问题标题】:issue with passing datetime fromDate toDate in url在 url 中传递 datetime fromDate toDate 的问题
【发布时间】:2015-10-05 00:07:30
【问题描述】:

当我用户输入日期时间 fromDate 和 toDate it webapi 时,我将数据传递到 url 我收到错误请求,因为 ':' 顺便说一句,我在我的 web 方法上使用 [System.Web.Http.Route("api/{fromDate:datetime}/{toDate:datetime}/searchDateRange")] 但不工作有人可以帮助我

错误

“/”应用程序中的服务器错误。

从 客户 (:)。

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.Web.HttpException:潜在危险 检测到来自客户端 (:) 的 Request.Path 值。

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[HttpException (0x80004005): 有潜在危险的 Request.Path 从客户端检测到值 (:)。]
System.Web.HttpRequest.ValidateInputIfRequiredByConfig() +9693412
System.Web.PipelineStepManager.ValidateHelper(HttpContext 上下文) +53

版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.34248

    [System.Web.Http.Route("api/{fromDate:datetime}/{toDate:datetime}/searchDateRange")]
            public IEnumerable<FormViewModelBase> GetFormsByDateRange(DateTime fromDate, DateTime toDate)
            {
//codehere 
}

【问题讨论】:

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


【解决方案1】:

我找到了解决办法

1-使用momentjs将其转换为utc并使用格式YYYYMMDDHHmmss

        var fromDate = moment(searchText.fromDateSearch).utc().format('YYYYMMDDHHmmss');
        var toDate = moment(searchText.toDateSearch).utc().format('YYYYMMDDHHmmss');
        url = ' api/' + fromDate + '/' + toDate + '/searchDateRange' ;

2-在webapi级别将字符串转换为日期时间

[System.Web.Http.Route("api/{fromDate}/{toDate}/searchDateRange")]
            public IEnumerable<FormViewModelBase> GetFormsByDateRange(string fromDate, string toDate)
            {

                var fromDateSearch = DateTime.ParseExact(fromDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
                var toDateSearch = DateTime.ParseExact(toDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
            }

【讨论】:

  • 真的很感激这个。不愿意走查询字符串路线,这真的很好。
【解决方案2】:

由于您使用的是日期时间,因此冒号显然与时间有关,因此服务器确实将冒号视为危险参数。你可以只传递日期组件,而不是包含的时间吗?或者,接受作为字符串的参数,并格式化参数以发送不带 : 的时间,但使用另一个分隔符。然后你可以解析参数并将分隔符替换回冒号并进行相应的处理。

另外,我认为日期中的 / 会是识别问题,所以您使用的是 XX-XX-XXXX 还是 XXXX-XX-XX 格式的日期?

【讨论】:

  • 我通常使用以下格式:yyyy-mm-ddThh-mm-ss
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 2015-04-28
  • 2019-12-28
  • 1970-01-01
相关资源
最近更新 更多