访问当前的RouteContext

时间:2014-08-31 07:23:04

标签: c# asp.net-mvc asp.net-core

在MVC 5中,您可以使用HttpContext访问HttpContext.Current。访问HttpContext或更高版本的首选方式是什么,只有当前RouteContext

1 个答案:

答案 0 :(得分:5)

RouteContext不是您通常想要访问的对象。 MVC使用它来表示路由是否被处理,因此不会流动。您可能希望改为访问RouteData

以下是访问它的几种方法:

在控制器上,您可以访问 - this.ActionContext.RouteDataHttpContext.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服务。