访问当前RouteContext
本文关键字:RouteContext 访问 | 更新日期: 2023-09-27 18:20:04
在MVC 5 I中,您可以使用HttpContext.Current
访问HttpContext
。访问HttpContext
或更好,仅访问当前RouteContext
的首选方式是什么?
RouteContext
不是您通常想要访问的对象。MVC使用它来表示路由是否已处理,因此不会流动。您可能想要访问RouteData
。
以下是访问它的几种方法:
在控制器上,您可以访问-this.ActionContext.RouteData
或HttpContext.Current
等效的this.ActionContext.HttpContext
或直接访问this.HttpContext
在ActionFilter
中,您可以通过方法参数访问它们
public void OnActionExecuting(ActionExecutingContext context)
{
var routeData = context.RouteData;
var httpContext = context.HttpContext;
...
}
在其他任何您可以访问DI系统的地方(比如服务的构造函数,或者当您可以直接访问服务提供商时),您都可以访问当前请求的ActionContext
,但请注意,只有当您在请求的范围内,并且您传入的服务提供商的范围是请求的范围时,这才有效。
public MyService(IScopedInstance<ActionContext> contextAccessor)
{
_httpContext = contextAccessor.Value.HttpContext;
_routeData = contextAccessor.Value.RouteData;
}
注意:如果您希望它只是一个具有get/set属性的简单类,并注册为Scoped服务,您也可以编写自己的"访问器"。