加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 多个DateTime参数的属性路由

发布时间:2020-12-16 06:27:32 所属栏目:asp.Net 来源:网络整理
导读:我已经定义了属性路由,它将两个参数作为datetime [Route("{controller}/{action}/{*startDate:datetime}/{*endDate:datetime}")] public bool OverView(DateTime startDate,DateTime endDate) { var dt = startDate.ToString("yyyy-MM-dd"); return true; }
我已经定义了属性路由,它将两个参数作为datetime

[Route("{controller}/{action}/{*startDate:datetime}/{*endDate:datetime}")]
        public bool OverView(DateTime startDate,DateTime endDate)
        {
            var dt = startDate.ToString("yyyy-MM-dd");
            return true;
        }

但不确定,它是如何可能的.属性路由适用于单个参数,但不确定它如何适用于2个参数.此外,很难知道如何将两个参数与网址区分开来

单一的param,工作正常

http://domain.com/Home/overview/2014/02/01

两个参数的网址是什么?我尝试了下面的一个,但有一个例外

http://domain.com/Home/overview/2014/02/01/2014/02/04

Exception
A catch-all parameter can only appear as the last segment of the route URL.
Parameter name: routeUrl

解决方法

第一种可能性

您应该通过其他方式格式化日期,因为这些是URL段分隔符…即使MVC支持多个贪婪段,中间也应该至少有一个静态段,因此路由可以区分一个结束和第二次开始.

所以,如果你只是替换你的符号

/home/overview/2014/02/01

/home/overview/2014-02-01

您当前的路由几乎可以正常工作,路由参数很容易将模型绑定到datetime类型实例.您的行动方法的路线声明应如下:

[Route("{controller}/{action}/{startDate:datetime?}/{endDate:datetime?}")]
public ActionResult OverView(DateTime? startDate,DateTime? endDate)
{
    ...
}

因此,如果您可以接受此更改(/ to – ),那么这是最简单的解决方案,因为它不需要您编写任何自定义代码(即自定义模型绑定器)

第二种可能性

有一个贪婪的路由参数并手动解析它.它将具有0,3或6个段.您应该能够手动解析这些.

[Route("{controller}/{action}/{*dateRange}")]
public ActionResult Overview(string dateRange)
{
    int numberOfSegments = dateRange.Split('/').Length;

    if (dateRange.EndsWith("/"))
    {
        numberOfSegments--;
    }

    switch (numberOfSegments)
    {
        case 0:
            // no dates provided
            ...
            break;
        case 3:
            // only one date provided
            ...
            break;
        case 6:
            // two dates privided
            ...
            break;
        default:
            // invalid number of route segments
            ...
            break;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读