Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC是否有任何日期时间路由约束?_Asp.net Mvc_Asp.net Mvc Routing_Route Constraint - Fatal编程技术网

Asp.net mvc ASP.NET MVC是否有任何日期时间路由约束?

Asp.net mvc ASP.NET MVC是否有任何日期时间路由约束?,asp.net-mvc,asp.net-mvc-routing,route-constraint,Asp.net Mvc,Asp.net Mvc Routing,Route Constraint,ASP.NET MVC是否在代码中包含任何路由约束?如果是,如何定义日期时间约束 例如,网址: http://mydomain.com/{versionDate}/{controller}/{action} http://mydomain.com/2010-01-20/search/posts 干杯:)所有的框架都是可以覆盖的,所以它是可能的,但要付出很大的代价,为了超越路由引擎的默认行为,但我同意@jrista的观点,即您可能希望将其作为控制器的参数,否则mvc将期望在2010-01-20文

ASP.NET MVC是否在代码中包含任何路由约束?如果是,如何定义日期时间约束

例如,网址:

http://mydomain.com/{versionDate}/{controller}/{action}
http://mydomain.com/2010-01-20/search/posts

干杯:)

所有的框架都是可以覆盖的,所以它是可能的,但要付出很大的代价,为了超越路由引擎的默认行为,但我同意@jrista的观点,即您可能希望将其作为控制器的参数,否则mvc将期望在2010-01-20文件夹中查找/搜索/帖子

我最终制定了自己的路由约束。只花了几分钟

using System;
using System.Web;
using System.Web.Routing;

namespace Whatever.Your.Funky.Cold.Medina.Namespace.Is
{
    public class DateTimeRouteConstraint : IRouteConstraint
    {
        #region IRouteConstraint Members

        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values,
                          RouteDirection routeDirection)
        {
            DateTime dateTime;

            return DateTime.TryParse(values[parameterName] as string, out dateTime);
        }

        #endregion
    }
}

简单:p

您还可以在路由上设置约束,类似这样。所使用的正则表达式不是很健壮,因此应该对其进行优化

routes.MapRoute( 
    "Version", "
    {versionDate}/{controller}/{action}", 
    new {controller="Search", action="Posts"}, 
    new {versionDate= @"\d\d\d\d-\d\d-\d\d" } 
    ); 

来自的信息。

您所说的日期时间限制到底是什么意思?该约束的值从何而来?您希望它如何基于该约束进行布线?这个约束可能仅仅是控制器的一个参数,它会进一步重定向或在算法上调用其他控制器方法吗?我希望如果有人在上面写了一个无效的日期,它会出错。因此,我认为最好在该route参数上放置route-constraint。。防止在2010-01-20文件夹中传入错误数据?没有文件夹。这只是控制器和它们的视图。而且,它不是动作方法的一部分。我实际上是在抽象控制器中捕捉到这一点,因为所有路由都会有这一点。这样的话,它是KISS.Hmmm,那么您可能想下载框架的源代码,看看是否可以扩展它,或者找到如何超越默认路由行为。我最后做了一个自定义路由约束。我花了几分钟的时间。解决了。这是一个相当优雅的解决方案+1这仍然是错误的,哈哈-我试图将“Funky”改为“Funky”,但它拒绝了编辑,因为<6个字符:-(Fix0rd.Donno为什么我以前没有修改它。我最初想过使用正则表达式,但正如你所建议的,它不是很健壮。这就是为什么我想利用
DateTime.TryParse(…)的功能
@37Start:你不认为像
“\d{4}-\d{2}-\d{2}”
这样的正则表达式更可读、更标准吗?;)或者甚至编写一个只允许输入正确日期的正则表达式(月份不大于12等)+1绝对更好。当我开始写这些东西的时候,我总是要拿出一本正则表达式的书,因为我很少这样做。我在出门的时候写下了这样的回应,因此有了“你应该改进它”的评论。