我正在使用CMS并需要进行动态路由。我尝试了很多东西,但我决定使用如下的路由。
[Route("{leftPath:values(announcements|duyurular)}/{announceUrl?}")]
public ActionResult Announcements(string leftPath, string announceUrl)
{
ViewBag.Url = announceUrl;
return View();
}
问题:
〔路线( “{leftPath:值(的公告| duyurular )} / {?announceUrl}”)]
粗体部分是动态的。例如,如果我只使用英语作为用户界面语言,我想要“公告”而不是上面的粗体部分。如果我使用英语,土耳其语和西班牙语,我想“公告| duyurular | anuncios ”。
如果我喜欢下面的内容,我会收到错误,因为Attributes接受常量字符串变量:
[Route("{leftPath:values(" + GetRouteValues() + ")}/{announceUrl?}")]
public ActionResult Announcements(string leftPath, string announceUrl)
{
ViewBag.Url = announceUrl;
return View();
}
有没有办法做到这一点或任何建议。
答案 0 :(得分:0)
我对此感到抱歉,但我找到了解决方案,我没有尝试足够的解决方案。 这段代码解决了我的问题。 (在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("公告"))
}
粗体函数返回我想要的字符串:' 公告'或者' 公告| 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;
}
}