URL

时间:2016-01-21 22:19:15

标签: asp.net-mvc-5 asp.net-mvc-routing

我的网址结构类似于http://website.com/city-state/category,例如/ miami-fl /餐厅或/ los-angeles-ca /酒吧。为了将它发送到正确的控制器,我有一个派生自RouteBase的类,它分割请求路径并计算出城市,州和类别。这适用于传入的URL。

public class LegacyUrlRoute : RouteBase
{

    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        RouteData routeData = new RouteData();
        routeData.RouteHandler = new MvcRouteHandler();

        string url = httpContext.Request.Path.ToLower(); //e.g. url = /los-angeles
        string[] path = url.TrimStart('/').Split('/'); //
        if (path.Length > 1)
        {
            string[] locale = path[0].Split('-');
            if (locale.Length > 1) //This is a city page, so send it to category controller
            {
                string stateName = locale[locale.Length - 1];
                string cityName = path[0].Replace(stateName, "").TrimEnd('-');

                routeData.Values.Add("controller", "Category");
                routeData.Values.Add("action", "City");
                routeData.Values.Add("categoryname", path[1]);
                routeData.Values.Add("city", cityName);
                routeData.Values.Add("state", stateName);
            }
        }
    }
}

但是,当我尝试使用Html.ActionLink创建链接时,它不会从此类中获取。

@Html.ActionLink("Restaurants in Miami", "Index", "Category", new {categoryname="Restaurants", state="FL", city="Miami"})

给我一​​个/ category / index的网址?categoryname = restaurants& state = fl& city = miami。 如何为我的网址结构生成准确的链接。

1 个答案:

答案 0 :(得分:0)

如果您希望传出的URL能够正常运行,则必须实现...objects.filter( Q(topic__exact = cat) | Q(topic__startswith = '%s,' % cat) | Q(topic__endswith = ',%s' % cat) | Q(topic__contains = ',%s,' % cat), other_attributes = 'xxx', ,它将一组路由值转换为URL。它通常应该是GetVirtualPath方法的镜像。

实现它的最简单方法就是创建一个数据结构,将您的路由值映射到URL,然后在this example中的两种方法中使用它。