访问当前RouteContext

本文关键字:RouteContext 访问 | 更新日期: 2023-09-27 18:20:04

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

访问当前RouteContext

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,但请注意,只有当您在请求的范围内,并且您传入的服务提供商的范围是请求的范围时,这才有效。

public MyService(IScopedInstance<ActionContext> contextAccessor)
{
    _httpContext = contextAccessor.Value.HttpContext;
    _routeData = contextAccessor.Value.RouteData;
}

注意:如果您希望它只是一个具有get/set属性的简单类,并注册为Scoped服务,您也可以编写自己的"访问器"。