私はアプリケーションを作成しました。URLが生成する場所はデータベースの値によって異なります。これらのURLを問題なく解析し、ルートハンドラーのデータベースからコントローラーとアクションを取得します。
しかし、URLを生成しようとすると、問題が発生します。
私の場合、次のようになります。
見る
@Html.ActionLink("more", MVC.Blog.Post(item.Alias)) // i use T4MVC
MyRouteConstraint
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
if (routeDirection == RouteDirection.UrlGeneration)
{
var data = GetDataFromDbByControllerActionAndParameters(values);
if (data == null)
return false;
var valuesToRemove = new List<string>();
var path = GenerateUrlByData(data, valuesToRemove);
values.Remove("controller");
values.Remove("action");
valuesToRemove.ForEach(v => values.Remove(v)); // remove values that is already used in path
values.Add("all", path) // path = "blog/post/postalias"
return true;
}
// skipped code
}
ルートルール
routes.MapRoute("Locations", "{*all}",
constraints: new { all = new LocationConstraints() },
defaults: new { },
namespaces: new []{typeof(BaseController).Namespace}).RouteHandler = new LocationRouteHandler();
その結果、私はこのようなURLを取得しました
localhost:8553/?Controller=Blog&Action=Post&alias=postalias
しかし、このように期待してください
localhost:8553/blog/post/postalias
どうすればURLを生成できますか?どこにあるべきですか?私はconstrantではないと思いますが、なぜこの場合に呼び出されるのですか?