ASP.NET Core MVC如何读取RouteData 替换旧版HttpContext.Current写法
ASP.NET Core 读取 RouteData 迁移方案
ASP.NET Core 已经移除了原ASP.NET MVC中的HttpContext.Current静态属性,需要通过依赖注入的方式获取当前请求上下文,对应改造步骤如下:
1. 注册HttpContext访问服务
在项目的服务注册逻辑中添加IHttpContextAccessor的注册,.NET 6+ 直接在Program.cs中添加即可:
builder.Services.AddHttpContextAccessor();
如果是.NET 5及更早版本,在Startup.cs的ConfigureServices方法中添加:
services.AddHttpContextAccessor();
2. 改造自定义Utilities类
通过构造函数注入IHttpContextAccessor来获取当前HttpContext,进而读取RouteData:
using Microsoft.AspNetCore.Routing; // 需要引入该命名空间使用GetRouteData扩展方法 public class Utilities { private readonly string _urlWord; public Utilities(IHttpContextAccessor httpContextAccessor) { var httpContext = httpContextAccessor.HttpContext; // 非请求场景下HttpContext会为null,需做空值判断避免空引用异常 if (httpContext != null) { _urlWord = Convert.ToString(httpContext.GetRouteData().Values["url"]); } else { // 可根据业务需求配置非请求场景下的默认值 _urlWord = string.Empty; } } }
补充场景:Controller/ RazorPage 内直接读取
如果是在控制器或者Razor页面内部读取RouteData,不需要额外注入IHttpContextAccessor,框架已经封装了对应属性可以直接调用:
// 控制器内部直接使用 var urlValue = RouteData.Values["url"]?.ToString();
内容的提问来源于stack exchange,提问作者Unknown Coder
相关产品推荐
相关产品推荐

