在ASP.Net Core中,如果直接在Middleware中获取RouteData返回的是空值,这是因为RouterMiddleware还没执行。...但有些情况下需要获取RouteData,这要怎么做呢?...public async Task Invoke(HttpContext context) { var routeData = context.GetRouteData() } TemplateMatcher...使用它可以将URL按路由Template解析成RouteData。所以我们可以使用它来获取RouteData。...view=aspnetcore-2.1 原文链接:http://www.zkea.net/codesnippet/detail/middleware-routedata.html
Request.RequestContext.RouteData.Values["attrvalues"].ToString() : "0"; 【6】获取 端口: Request.Url.Port ...二、当前controller、action的获取 RouteData.Route.GetRouteData(this.HttpContext).Values["controller"] RouteData.Route.GetRouteData...(this.HttpContext).Values["action"] 或 RouteData.Values["controller"] RouteData.Values["action"] 如果在视图中可以用...ViewContext.RouteData.Route.GetRouteData(this.Context).Values["controller"] ViewContext.RouteData.Route.GetRouteData...(this.Context).Values["action"] 或 ViewContext.RouteData.Values["controller"] ViewContext.RouteData.Values
另外两个则是作为路由解析的输出,一个是代表存放路由参数的RouteData对象,另一个则是作为请求处理器的RequestDelegate对象,对应的属性分别是RouteData和Handler。...具体来说,我们为某个RouteData当前的状态创建一个快照,在后续的某个时刻我们利用这个快照让这个RouteData对象回复到当初的状态。...当我们调用其Restore方法的时候,目标RouteData将会恢复到快照创建时的状态。我们可以直接调用RouteData的PushState为它自己创建一个快照。...1: RouteData routeData = new RouteData(); 2: RouteDataSnapshot snapshot = routeData.PushState(null,...routeData.Values.Any()); 10: Debug.Assert(!routeData.DataTokens.Any()); 11: Debug.Assert(!
如果得到的RouteData不为空,则返回之。...= routeData) 14: { 15: return routeData; 16: } 17:...routeData = RouteTable.Routes.GetRouteData(httpContext); 11: if (null == routeData...routeData = this.RequestContext.RouteData; 19: var controller = this.ControllerFactory.CreateController...routeData = requestContext.RouteData; 6: string controllerType = string.Format("{0}Controller
具体来说,我们为某个RouteData当前的状态创建一个快照,在后续的某个时刻我们利用这个快照让这个RouteData对象回复到当初的状态。...当我们调用其Restore方法的时候,目标RouteData将会恢复到快照创建时的状态。我们可以直接调用RouteData的PushState为它自己创建一个快照。...虽然我们在后续步骤中修改了这个RouteData的状态,但是一旦我们调用了这个RouteDataSnapshot对象的Restore方法,这个RouteData将重新恢复到最初的状态。...1: RouteData routeData = new RouteData(); 2: RouteDataSnapshot snapshot = routeData.PushState(null,...routeData.Values.Any()); 10: Debug.Assert(!routeData.DataTokens.Any()); 11: Debug.Assert(!
c={0}&a={1}", routeData["{controller}"], routeData["{action}"])); // 入口二:指定MvcHandler...) { this.routeData = routeData; } public void ProcessRequest(HttpContext...= routeData }; controller.Execute(requestContext); } public...= routeData }; controller.Execute(requestContext); } 这里由于要使用到RouteData这个路由表的Dictionary...{ get; set; } } 可以看出,其实就是简单地包裹了一下,添加了一个RouteData的路由表属性。
RouteContext上下文的RouteData最终会被附加到代表当前请求上下文的HttpContext上,而具体承载这个RouteData的就是这个名为RoutingFeature的特性。...如下面的代码片段所示,这个接口通过属性RouteData来保存最终附加到HttpContext的RouteData。...1: public interface IRoutingFeature 2: { 3: RouteData RouteData { get; set; } 4: } 5: ...6: public class RoutingFeature : IRoutingFeature 7: { 8: public RouteData RouteData { get; set...在这之前它会从RouteContext上下文中提出出RouteData,然后据此创建一个RoutingFeature对象并附加到HttpContext上面。
获取控制器名称: ViewContext.RouteData.Values["controller"].ToString(); 获取Action名称: ViewContext.RouteData.Values...["action"].ToString(); 获取路由参数值: ViewContext.RouteData.Values[名称].ToString(); 如:ViewContext.RouteData.Values...["ID"].ToString(); 获取ID的值 获取area名称 在代码中: ControllerContext.RouteData.DataTokens["area"] 在View中: ViewContext.RouteData.DataTokens...["area"] 1 var action = ViewContext.RouteData.Values["Action"].ToString().ToLower(); 2 var controllerName...= ViewContext.RouteData.Values["controller"].ToString().ToLower(); 3 var areaName = ViewContext.RouteData.DataTokens
[源代码从这里下载] 如下面的代码片断所示,GetVirtualPath定义了两个GetVirtualPath方法重载,它们共同的参数requestContext和values分别表示请求上下文(RouteData...路由对象针对GetVirtualPath方法而进行的路由匹配只要求URL模板中定义的变量的值都能被提供,而这些变量值具有三种来源,分别是路由对象定义的默认变量值、指定RequestContext的RouteData...Page 2: { 3: protected void Page_Load(object sender, EventArgs e) 4: { 5: RouteData...routeData = new RouteData(); 6: routeData.Values.Add("areaCode","0512"); 7: routeData.Values.Add...= routeData; 11: 12: RouteValueDictionary values = new RouteValueDictionary(); 13:
RouteData { get; set; } 5: } 二、Route和RouteTable RouteData具有一个类型为RouteBase的Route属性,表示当前路由表中与当前请求匹配的路由对象...routeData = new RouteData(); 15: foreach (var item in variables) 16: {...= routeData) 9: { 10: return routeData; 11: } 12:...routeData = RouteTable.Routes.GetRouteData(httpContext); 13: if (null == routeData) 14:...如果得到的RouteData不为空,根据该对象本身和和之前得到的HttpContextWrapper对象创建一个表示当前请求上下文的RequestContext对象,将其作为参数传入RouteData的
ASP.NET MVC的URL路由系统通过注册的路由表对HTTP请求进行解析从而得到一个用于封装路由数据的RouteData对象,而这个过程是通过自定义的UrlRoutingModule对HttpApplication...RouteData中已经包含了目标Controller的名称,现在我们来进一步分析真正的Controller对象是如何被激活的。我们首先需要了解一个类型为MvcRouteHandler的类型。...当GetRouteData方法被执行后,Route的RouteHandler属性值将反映在得到的RouteData的同名属性上。...由于RouteData的RouteHandler来源于对应Route对象的RouteHandler,而后者在默认的情况下是一个MvcRouteHandler对象,所以默认情况下用于处理HTTP请求的就是这么一个...此外我们还需要得到类型的命名空间,而命名空间具有两个来源,即RouteData和当前ControllerBuilder。
var context = new RouteContext(httpContext); context.RouteData.Routers.Add(_router); public class RouteContext...{ private RouteData _routeData; public RequestDelegate Handler ; public HttpContext HttpContext...;//简单的赋值 public RouteData RouteData; } ⑥调用_router(也就是RouteCollection)的RouteAsync(context...context.Handler处理HttpContext; httpContext.Features[typeof(IRoutingFeature)] = new RoutingFeature() { RouteData...= context.RouteData, }; await context.Handler(context.HttpContext); 三、其他 由于文章写的比较早各种原因一直没有写完
["controller"]; var actionName = context.RouteData.Values["action"]; Console.WriteLine...["controller"]; var actionName = context.RouteData.Values["action"]; Console.WriteLine...["controller"]; var actionName = context.RouteData.Values["action"]; //获取异常信息...["controller"]; var actionName = context.RouteData.Values["action"];...["controller"]; var actionName = context.RouteData.Values["action"]; //代码执行到这里
public ActionResult List() { //获取路由中所有的key foreach (string item in RouteData.Values.Keys...ViewBag.Keys += item + "--->"; } //获取值 foreach (string item in RouteData.Values.Values...ViewBag.Values += item + "--->"; } //取ID参数值 ViewBag.id = RouteData.Values
= new RequestContext(contextWrapper, routeData); 10: IHttpHandler handler = routeData.RouteHandler.GetHttpHandler...对于被拦截的请求,UrlRoutingModule利用注册的路由表对其进行匹配和解析,进而得到一个包含所有路由信息的RouteData对象。...routeData = new RouteData(); 30: routeData.RouteHandler = this.RouteHandler; 31:...在匹配的情况下我们创建并返回相应的RouteData对象,否则直接返回Null。...生成的URL连同当前页面的RouteData的属性通过如下所示的HTML输出来。
var context = new RouteContext(httpContext); context.RouteData.Routers.Add(_router);...= context.RouteData, }; //匹配到路由处理 await context.Handler(context.HttpContext...async virtual Task RouteAsync(RouteContext context) { // Perf: We want to avoid allocating a new RouteData...var snapshot = context.RouteData.PushState(null, values: null, dataTokens: null); for (var i = 0;...i < Count; i++) { var route = this[i]; context.RouteData.Routers.Add(route);
override HttpControllerDescriptor SelectController(HttpRequestMessage request) { IHttpRouteData routeData...= request.GetRouteData(); if (routeData == null) throw new HttpResponseException(HttpStatusCode.NotFound...HttpResponseException(HttpStatusCode.NotFound); var version = DefaultVersion; if (IsVersionRoute(routeData...HttpStatusCode.NotFound); } return base.SelectController(request); } private bool IsVersionRoute(IHttpRouteData routeData...= String.Empty; var prevRouteTemplate = "api/{controller}/{id}"; object outVersion; if(routeData.Values.TryGetValue
如果返回一个具体的RouteData对象,它会被转换成一个具有如下定义的HostedHttpRouteData对象并返回。...属性直接就是对该RouteData对象的引用。...在这种情况下,得到的HttpRouteData实际上就是一个HostedHttpRouteData对象,所以它可以通过其OriginalRouteData属性得到原始的RouteData。...routeData = this.OriginalRoute.GetRouteData(httpContextBase); 12: if (routeData !...; 25: if (routeData !
(其实RouteData属性表示的RouteData对象已经包含在RequestContext属性表示的RequestContext对象中)。...对于UrlHelper来说,通过RequestContext属性表示的当前请求上下文包含了相应的路由信息,即RequestContext的RouteData属性表示的RouteData。...RouteData的Values属性中必须包含一个Key为“controller”的元素,其值就代表当前Controller的名称。...routeData = new RouteData(); 11: routeData.Values.Add("controller", "home"); 12:...routeData.Values.Add("action", "index"); 13: routeData.Values.Add("id", "002"); 14:
httpContext.Response.ContentType = "text/html; charset=utf-8"; 19 var routeData...= new RouteData(); 20 routeData.Values["controller"] = "Sys"; 21 routeData.Values...NotFound"; 22 var requestContext = new RequestContext(new HttpContextWrapper(httpContext), routeData
领取专属 10元无门槛券
手把手带您无忧上云