【问题标题】:Is there any way to pass dynamic parameter with route attribute?有没有办法通过路由属性传递动态参数?
【发布时间】:2015-03-31 14:05:36
【问题描述】:

我正在开发 CMS,需要进行动态路由。我尝试了很多东西,但我决定使用下面的路由。

[Route("{leftPath:values(announcements|duyurular)}/{announceUrl?}")]
public ActionResult Announcements(string leftPath, string announceUrl)
{
    ViewBag.Url = announceUrl;
    return View();
}

问题:

[Route("{leftPath:values(announcements|duyurular)}/{announceUrl?}")]

粗体部分是动态的。例如,如果我只使用英语作为用户界面语言,我想使用“announcements”而不是上面的粗体部分。如果我使用英语、土耳其语和西班牙语,我想使用“announcements|duyurular|anuncios”。

如果我像下面这样,我会收到错误,因为属性接受常量字符串变量:

[Route("{leftPath:values(" + GetRouteValues() + ")}/{announceUrl?}")]
public ActionResult Announcements(string leftPath, string announceUrl)
{
    ViewBag.Url = announceUrl;
    return View();
}

有没有办法做到这一点或任何建议。

【问题讨论】:

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


    【解决方案1】:

    对此我很抱歉,但我找到了我的解决方案,但我没有尝试足够的解决方案。 这段代码解决了我的问题。 (在 RouteConfig 类 -> RegisterRoutes() 函数中。):

    routes.MapRoute(
        name: "announcementRoute",
        url: "{leftPath}/{announcementUrl}",
        defaults: new { controller = "Home", action = "Announces", announcementUrl = UrlParameter.Optional },
        constraints: new { leftPath = new ValuesConstraint(Tools.GetRouteValues("announcements")) }
    );
    

    约束:新的 {
    leftPath = new ValuesConstraint (Tools.GetRouteValues ( "announcements" ))
    }

    粗体函数根据语言返回我想要的字符串:'announcements' 或 'announcements|duyurular|anuncios'。

    对于好奇的人:

    public class ValuesConstraint : IRouteConstraint
    {
        private readonly string[] validOptions;
        public ValuesConstraint(string options)
        {
            validOptions = options.Split('|');
        }
    
        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            object value;
            if (values.TryGetValue(parameterName, out value) && value != null)
            {
                return validOptions.Contains(value.ToString(), StringComparer.OrdinalIgnoreCase);
            }
            return false;
        }
    }
    

    更多:MSDN Resource

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      相关资源
      最近更新 更多