当我用户输入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
}
答案 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格式的日期吗?