2

отработку этого примера:Транслирующие маршруты с параметром действия с использованием RouteLocalization.Mvc

[Route("MyActionWithStringParameter/{parameter}")] 
ActionResult MyAction(string parameter) 

.ForAction(x => x.MyAction(), new [] { typeof(string) }) 

Из документации GitHub для RouteLocalization.Mvc. 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 требуется формальный параметр 'slug'. Это имеет смысл.

Как вы это делаете?

ответ

0

Наткнулся на это, пытаясь решить ту же проблему.

Только что удалось получить следующую альтернативу работе, используя строковое значение для действия, а не выражение linq. Строка - это имя метода действия, а не имя аннотированного маршрута.

localization.ForCulture("en") 
       .ForController<TestController>() 
      .ForAction("TestMethod", new[] { typeof(int) }) 
      .AddTranslation("TranslatedTest/TranslatedTestMethod/{id}");