Я бы предложил использовать пользовательский обработчик маршрута, как показано ниже
public class LanguageRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
IRouteHandler handler = new MvcRouteHandler();
var vals = requestContext.RouteData.Values;
if(vals["language"] == null)
{
vals["language"] = "pt";
}
return handler.GetHttpHandler(requestContext);
}
}
и иметь другой маршрут без значения языкового маршрута и установить его обработчик маршрута (global.asax)
routes.MapRoute(
"Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
).RouteHandler = new LanguageRouteHandler();
Это не будет перенаправлять Home / index на pt / home / index, но обеспечит language = "pt" для вашего метода действия индекса (и всех остальных). если вы хотите перенаправить, вы можете реализовать actionfilter, но перенаправление создаст проблемы с почтовыми запросами. Например, когда вы публикуете форму в / home / index и предполагаете, что она перенаправлена с помощью фильтра действий, перенаправленный запрос потеряет опубликованные данные формы