使用此示例:
[Route("MyActionWithStringParameter/{parameter}")]
ActionResult MyAction(string parameter)
.ForAction(x => x.MyAction(), new [] { typeof(string) })
来自RouteLocalization.Mvc的GitHub文档。 https://github.com/Dresel/RouteLocalization/blob/master/Documentation/SelectingAndTranslatingRoutes.md
我无法让自己的代码工作。
这是我的默认路线:
[Route("~/{slug:regex((bookreviews)-[^-]+-(\\d+))}")]
以下是我如何初始化RouteConfig中的翻译:
var culture = Thread.CurrentThread.CurrentUICulture;
var specificCulture = CultureInfo.CreateSpecificCulture(culture.Name);
var region = new RegionInfo(specificCulture.Name);
const string en = "en";
ISet<string> acceptedCultures = new HashSet<string>() { en, "se", "dk" };
routes.Localization(configuration =>
{
configuration.DefaultCulture = en;
configuration.AcceptedCultures = acceptedCultures;
configuration.AttributeRouteProcessing = AttributeRouteProcessing.AddAsNeutralAndDefaultCultureRoute;
configuration.AddCultureAsRoutePrefix = false;
configuration.AddTranslationToSimiliarUrls = false;
}).TranslateInitialAttributeRoutes().Translate(localization =>
{
localization.AddRoutesTranslation(region.TwoLetterISORegionName.ToLower());
});
CultureSensitiveHttpModule.GetCultureFromHttpContextDelegate = Localization.DetectCultureFromBrowserUserLanguages(acceptedCultures, en);
以下是有问题的翻译:
localization.ForCulture(culture)
.ForController<UserController>()
.ForAction(x => x.UserReviews(), new[] { typeof(string) })
.AddTranslation(ConfigurationHelper.AppSetting<string>("Route.User.UserReviews"));
使用来自web.config的值:
~/{slug:regex((boganmeldelser)-[^-]+-(\\d+))}
但是我在这行上遇到编译器错误:
ForAction(x => x.UserReviews(), new[] { typeof(string) })
,x.UserReviews需要正式参数&#39; slug&#39;。这是有道理的。
你是如何做到这一点的?
答案 0 :(得分:0)
在尝试解决同样的问题时偶然发现了这一点。
通过使用字符串值作为操作而不是linq表达式,我们设法获得了以下替代方法。字符串是操作方法名称,而不是带注释的路由名称。
localization.ForCulture("en")
.ForController<TestController>()
.ForAction("TestMethod", new[] { typeof(int) })
.AddTranslation("TranslatedTest/TranslatedTestMethod/{id}");