在MVC 5中,您可以使用HttpContext
访问HttpContext.Current
。访问HttpContext
或更高版本的首选方式是什么,只有当前RouteContext
?
答案 0 :(得分:5)
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
,但请注意这只适用于您在请求范围内且您传入的serviceprovider作用于请求的范围。
public MyService(IScopedInstance<ActionContext> contextAccessor)
{
_httpContext = contextAccessor.Value.HttpContext;
_routeData = contextAccessor.Value.RouteData;
}
注意:你也可以自己写一个&#34; Accessor&#34;如果你喜欢它只是一个带有get / set属性的简单类,它被注册为Scoped服务。