访问当前的RouteContext

Mar*_*cus 4 c# asp.net-mvc asp.net-core

在MVC 5中,您可以使用HttpContext进行访问HttpContext.Current。访问当前HttpContext或更好的仅当前的首选方式是RouteContext什么?

Yis*_*zer 5

RouteContext不是您通常要访问的对象。MVC使用它来通知路由是否已处理,因此不会流动。您可能想要访问RouteData

这里是几种访问它的方法:

在控制器上,您可以访问- this.ActionContext.RouteDataHttpContext.Current等效项this.ActionContext.HttpContext或直接访问this.HttpContext

在中,ActionFilter您可以通过method参数访问它们:

public void OnActionExecuting(ActionExecutingContext context)
{
    var routeData = context.RouteData;
    var httpContext = context.HttpContext;
    ...
}
Run Code Online (Sandbox Code Playgroud)

您可以访问DI系统的任何其他地方(例如,服务的构造函数,或可以直接访问服务提供者的地方),都可以在当前请求处获得,ActionContext但请注意,仅当您在请求范围内时,此方法才有效而您传入的serviceprovider仅限于该请求。

public MyService(IScopedInstance<ActionContext> contextAccessor)
{
    _httpContext = contextAccessor.Value.HttpContext;
    _routeData = contextAccessor.Value.RouteData;
}
Run Code Online (Sandbox Code Playgroud)

注意:如果您只希望自己是一个简单的类,且具有获取/设置属性并注册为范围服务,则也可以编写自己的“访问器”。