在url中将日期时间从日期传递到日期的问题

时间:2015-07-15 19:11:44

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

当我用户输入datetime fromDate时,我向url发出传递数据,并将其命名为webapi因为':'顺便说一下,我在我的网络方法上使用[System.Web.Http.Route("api/{fromDate:datetime}/{toDate:datetime}/searchDateRange")],但是有人帮助我不能正常工作

错误

  

' /'中的服务器错误应用

     

从中检测到潜在危险的Request.Path值   客户(:)。

     

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

     

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

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

     

堆栈追踪:

     

[HttpException(0x80004005):一个潜在危险的Request.Path   从客户端检测到的值(:)。]   System.Web.HttpRequest.ValidateInputIfRequiredByConfig()+ 9693412
  System.Web.PipelineStepManager.ValidateHelper(HttpContext context)+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 
}

2 个答案:

答案 0 :(得分:2)

我找到了解决方案

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);
            }

答案 1 :(得分:1)

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

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