ASP.NET MVC には、コードに焼き付けられたルート制約が含まれていますか? もしそうなら、日時の制約を定義するにはどうすればよいですか?
例えば。URL:
http://mydomain.com/{versionDate}/{controller}/{action}
http://mydomain.com/2010-01-20/search/posts
乾杯 :)
ASP.NET MVC には、コードに焼き付けられたルート制約が含まれていますか? もしそうなら、日時の制約を定義するにはどうすればよいですか?
例えば。URL:
http://mydomain.com/{versionDate}/{controller}/{action}
http://mydomain.com/2010-01-20/search/posts
乾杯 :)
結局、自分でルート制約を作成しました。ほんの数分しかかかりませんでした。
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" }
);
情報はこちらから。
すべてのフレームワークはオーバーライド可能であるため、ルート エンジンのデフォルトの動作をオーバーライドすることは非常に困難ですが、@jrista に同意します。それ以外の場合は、コントローラーのパラメーターにしたい場合があります。 2010-01-20 フォルダー内で /search/posts が見つかることを期待します