Мы используем фильтр действий для этого.
...
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var controller = (Controller) filterContext.Controller;
Breadcrumb[] breadcrumbs = _breadcrumbManager.PushBreadcrumb(_breadcrumbLinkText);
controller.ViewData.Add(breadcrumbs);
}
Прежде чем вы упомянули об этом, у меня тоже есть отвращение к расположению службы в атрибутах фильтра - но у нас осталось несколько вариантов. IBreadcrumbManager выглядит так:
public interface IBreadcrumbManager
{
Breadcrumb[] PushBreadcrumb(string linkText);
}
Реализация помещает объекты Breadcrumb в сессию. URL-адрес HttpContext.Current.Request.RawUrl