Лучший способ справиться с этим - на уровне маршрутизации. Сделайте все пути маршрутов строчными, и они будут правильно распространяться на ваши ссылки действий и т. Д.
Я решил эту проблему путем создания нового класса маршрута, который наследует Route и просто переопределяет метод GetVirtualPath;
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
var virtualPath = base.GetVirtualPath(requestContext, values);
if (virtualPath != null)
virtualPath.VirtualPath = virtualPath.VirtualPath.ToLowerInvariant();
return virtualPath;
}
Я также создал несколько методов расширения для RouteCollection, чтобы упростить использование этого нового класса маршрута.