我创建了应用程序,其中 url 生成取决于数据库值。我解析这些 url 没有任何问题,并在我的路由处理程序中从数据库中获取控制器和操作。
但是当我尝试生成 url 时,我遇到了麻烦。
就我而言,它似乎是:
看法
@Html.ActionLink("more", MVC.Blog.Post(item.Alias)) // i use T4MVC
我的路由约束
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();
结果我得到了这样的网址
localhost:8553/?Controller=Blog&Action=Post&alias=postalias
但期待这样
localhost:8553/blog/post/postalias
我怎样才能生成网址?它应该在哪里?我认为不是常数,但为什么在这种情况下会调用它?