Сделайте так, чтобы ActionFilter посмотрел на гипотетический ActionArgument - PullRequest
0 голосов
/ 25 июня 2019

Я создаю приложение .net core mvc, которое должно быть многоязычным. Я настроил свой маршрут так, чтобы язык был частью запроса.

"{language=nl}/{controller=Home}/{action=Index}/{id?}"

На моем контроллере у меня есть Действия, все они имеют языковой параметр

 public IActionResult Hello(int id, string language){
     _bussinslayer.SetLanguage(language);
     //do actual work
 }

Это работает, как и ожидалось. Тем не менее, у меня будет много действий, у них всех будет это, и они все будут делать то же самое с этим. Установка языка в базовой системе.

Итак, я создал ActionFilterAttribute, делая в основном

 public override void OnActionExecuting(ActionExecutingContext filterContext)
 {
     //input validation
     var language = filterContext.ActionArguments["language"] as string;
     _bussinslayer.SetLanguage(language);
 }

Что также все еще работает, , пока я не удалю параметр языка из действия . В этот момент языковой аргумент больше не находится в коллекции ActionArguments.

 //This work, but the language parameter is unused
 public IActionResult Hello(int id, string language){         
     //do actual work
 }

 //This no longer works
 public IActionResult Hello(int id){         
     //do actual work
 }

В ретроспективе имеет смысл, что аргумент отсутствует в коллекции, если нет параметра. Но я хотел бы получить доступ к значению, как если бы аргумент был там. как это можно получить?

1 Ответ

0 голосов
/ 25 июня 2019

Это все еще в RouteData.

var language = filterContext.RouteData.Values["language"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...