使用日期格式的路由参数验证

我收到所有输入的验证失败消息(状态代码 400),当我将日期格式更改为字符串时,正则表达式有效,但 DateType 验证不起作用。它接受 2019-02-31 作为有效输入。知道如何使其工作 DateTime 参数类型吗?


    [HttpGet("{date}")]

    public ActionResult<string> Get( [RegularExpression(@"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"), DataType(DataType.Date)] DateTime date)

    {

         return Ok();

    }


摇曳的蔷薇
浏览 104回答 3
3回答

www说

对于路由验证,您应该避免使用 for input validation。不要对输入验证使用约束。如果约束用于输入验证,则无效输入会导致 404 - Not Found 响应,而不是带有相应错误消息的 400 - Bad Request。路线约束用于消除相似路线的歧义,而不是验证特定路线的输入。如果您想通过路由约束检查输入,您可以通过实现IRouteConstraint.DateRouteConstraintpublic class DateRouteConstraint : IRouteConstraint{    public static string DateRouteConstraintName = "DateRouteConstraint";    public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)    {        object dateValue;        if (values.TryGetValue("date", out dateValue))        {            DateTime date;            string[] formats = { "yyyy-MM-dd" };            if (DateTime.TryParseExact(dateValue.ToString(), formats,                            CultureInfo.InvariantCulture,                            DateTimeStyles.None, out date))            {                return true;            }        }        return false;    }}登记DateRouteConstraintservices.AddRouting(options =>{    options.ConstraintMap.Add(DateRouteConstraint.DateRouteConstraintName, typeof(DateRouteConstraint));});使用案例[HttpGet("{date:DateRouteConstraint}")]public ActionResult<string> Get(DateTime date){    return Ok();}

凤凰求蛊

这里有一个例子:https://learn.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/create-a-rest-api-with-attribute-routing#get-books-by-publication-date使用 dotnet core 3 我必须转义 { 和 } (使它们加倍),它很简单:[HttpGet("{date:datetime:regex(\\d{{4}}-\\d{{2}}-\\d{{2}})}")]public WeatherForecast GetForecast(DateTime date)...

繁星coding

您不能将RegularExpression属性应用于 a&nbsp;DateTime,因为它不是字符串;该属性仅对字符串有效。您可以使用正则表达式路由约束,即[HttpGet("{date:regex(...)}")],但在这种情况下,您最好使用约束datetime:[HttpGet("{date:datetime}")]。
打开App,查看更多内容
随时随地看视频慕课网APP