Я создаю приложение .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
}
В ретроспективе имеет смысл, что аргумент отсутствует в коллекции, если нет параметра. Но я хотел бы получить доступ к значению, как если бы аргумент был там. как это можно получить?