0
我已經創建了應用程序,其中url生成取決於數據庫值。 我解析這些網址沒有任何問題,並從我的路由處理程序中的數據庫獲取控制器和操作。asp.net mvc,通過自定義路由生成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
我怎麼能生成網址是什麼?它應該在哪裏?我認爲不是在規範中,但爲什麼在這種情況下被引用?