Pete,
en el código, se puede utilizar un actionfilter para determinar qué se está encendiendo:
public class AddUrlInfoToSessionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAjaxRequest())
{
// where we are now - do something with the vars in real app
var currentActionName = filterContext.ActionDescriptor.ActionName;
var currentControllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
var currentRouteData = filterContext.RouteData;
var currentUrlInfo = new UrlHelper(filterContext.RequestContext);
string url = RouteTable.Routes.GetVirtualPath(filterContext.RequestContext, currentRouteData.Values).VirtualPath;
}
}
}
y luego decorar cada Controlador que le interese como a continuación (o ponerlo en un controlador de base):
[HandleError]
[AddUrlInfoToSessionAttribute]
public class HomeController : Controller
{
// controller stuff
}
[AddUrlInfoToSession]
public abstract class BaseController : Controller
{
}
esperanza esto ayuda
Jim
EDIT: simplemente ordenaban el ejemplo un poco añadiendo lo siguiente al método de filtro:
cadena url = RouteTable.Routes.GetVirtualPath (filterContext.RequestContext, currentRouteData.Values) .VirtualPath;
Muchas gracias, esto es simple y útil. La desventaja es la suposición de que cada controlador hereda confiablemente de una clase base común. –
Edité la publicación. Puede usar global.asax en su lugar si no desea crear una clase de controlador base – wassertim