首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏ZKEASOFT

    .Net Core在Middleware中解析RouteData

    在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

    1.5K30发布于 2018-09-12
  • 来自专栏james大数据架构

    在ASP.NET MVC 中获取当前URL、controller、action

    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

    3.8K90发布于 2018-01-22
  • 来自专栏技术之路

    Blazor-Navigating 组件

    <Router AppAssembly="@typeof(App).Assembly"> <Found Context="<em>routeData</em>"> <RouteView RouteData=" @routeData" DefaultLayout="@typeof(MainLayout)" /> <FocusOnNavigate RouteData="@routeData" Selector 我们添加了一个跳转的延时操作 <Router AppAssembly="@typeof(App).Assembly" OnNavigateAsync="Callback"> <Found Context="<em>routeData</em> "> <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" /> <FocusOnNavigate RouteData="@routeData" Selector="h1" /> </Found> <NotFound> <PageTitle>Not found</PageTitle

    20200编辑于 2025-03-26
  • 来自专栏大内老A

    ASP.NET Core的路由[2]:路由系统的核心对象——Router

    另外两个则是作为路由解析的输出,一个是代表存放路由参数的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(!

    1.7K10发布于 2018-07-31
  • 来自专栏大内老A

    ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件

    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上面。

    84450发布于 2018-03-27
  • 来自专栏大内老A

    ASP.NET MVC是如何运行的[2]: URL路由

    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

    2.6K60发布于 2018-02-07
  • 来自专栏大内老A

    通过一个模拟程序让你明白ASP.NET MVC是如何运行的

    如果得到的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

    1.5K60发布于 2018-01-15
  • 来自专栏大内老A

    ASP.NET Core的路由[2]:路由系统的核心对象——Router

    具体来说,我们为某个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(!

    2.5K40发布于 2018-03-27
  • 来自专栏EdisonTalk

    自己动手写一个简单的MVC框架(第一版)

    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的路由表属性。   

    1.3K21发布于 2018-08-20
  • 来自专栏晓晨的专栏

    Asp.Net MVC 获取当前 Controller Action Area

    获取控制器名称: 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

    2.3K20发布于 2018-06-22
  • 来自专栏技术之路

    Blazor-全局路由跳转事件

    _Imports).Assembly }" OnNavigateAsync="Callback"> <Found Context="<em>routeData</em>"> <RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" /> <FocusOnNavigate RouteData ="routeData" Selector="h1" /> </Found> </Router> @code { private async Task Callback(NavigationContext _Imports).Assembly }" OnNavigateAsync="Callback"> <Found Context="<em>routeData</em>"> <RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" /> <FocusOnNavigate RouteData

    46500编辑于 2025-03-07
  • 来自专栏大内老A

    ASP.NET的路由系统:根据路由规则生成URL

    [源代码从这里下载] 如下面的代码片断所示,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:

    1.9K80发布于 2018-01-15
  • 来自专栏技术之路

    Blazor-Navigating组件

    App.razor中设置跳转等待过程中的界面,我们做一个延时的界面看看实际的效果 <Router AppAssembly="@typeof(App).Assembly"> <Found Context="<em>routeData</em> "> <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" /> <FocusOnNavigate RouteData="@routeData" Selector="h1" /> </Found> <NotFound> <PageTitle>Not found "> <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" /> <FocusOnNavigate RouteData="@routeData" Selector="h1" /> </Found> <NotFound> <PageTitle>Not found</PageTitle

    30110编辑于 2025-03-05
  • 来自专栏明志德到的IT笔记

    ASP.Net Core 5.0 MVC中AOP思想的体现(五种过滤器)并结合项目案例说明过滤器的用法

    ["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"]; //代码执行到这里

    49910编辑于 2023-10-21
  • 来自专栏大内老A

    ASP.NET MVC是如何运行的(3): Controller的激活

    ASP.NET MVC的URL路由系统通过注册的路由表对HTTP请求进行解析从而得到一个用于封装路由数据的RouteData对象,而这个过程是通过自定义的UrlRoutingModule对HttpApplication RouteData中已经包含了目标Controller的名称,现在我们来进一步分析真正的Controller对象是如何被激活的。我们首先需要了解一个类型为MvcRouteHandler的类型。 当GetRouteData方法被执行后,Route的RouteHandler属性值将反映在得到的RouteData的同名属性上。 由于RouteData的RouteHandler来源于对应Route对象的RouteHandler,而后者在默认的情况下是一个MvcRouteHandler对象,所以默认情况下用于处理HTTP请求的就是这么一个 此外我们还需要得到类型的命名空间,而命名空间具有两个来源,即RouteData和当前ControllerBuilder。

    1.2K90发布于 2018-02-07
  • 来自专栏calvin

    asp.net mvc输出自定义404等错误页面,非302跳转。

    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

    1.5K10发布于 2018-11-20
  • 来自专栏大内老A

    ASP.NET路由系统实现原理:HttpHandler的动态映射

    = 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输出来。

    2K60发布于 2018-01-15
  • 来自专栏Core Net

    ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler)

    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);  三、其他       由于文章写的比较早各种原因一直没有写完

    59630发布于 2019-02-20
  • 来自专栏王清培的专栏

    .NET/ASP.NET MVC Controller 控制器(深入解析控制器运行原理)

    经过前一篇文章.NET/ASP.NET Routing路由(深入解析路由系统架构原理) 的讲解,我们对ASP.NETRouting路由系统的整个运行机制有了一个基本的了解;当我们能清楚的知道Url是如何被解析成RouteData MvcHandler对象作为源头调用起来的,也就是说,当我们穿过UrlRoutingModule对象后,并且成功的获取到应用框架配置的路由数据后,下面将进入IHttpHandler接口,而这个接口真是我们初始化RouteData ASP.NETMVC应用框架的范围,我们可以简单的将路由解析(UrlRoutingModule)的过程视为将请求的Url(含有数据的Url)与我们配置的Url模板进行模式匹配的过程,得出匹配后的Url数据(RouteData ),然后将Url数据并且连同当前请求上下文一起封装成RequestContext对象(RouteData、HttpContextBase)传入到Controller解析的环节,也就是MvcHandler );而控制器的执行必须需要RouteData中的有关Controller数据对象,也就是从请求Url中通过模式匹配出来的{Controller}部分的字符串; ControllerBase定义了Controller

    1.5K60发布于 2018-01-08
  • 来自专栏EdisonTalk

    自己动手写一个简单的MVC框架(第二版)

    实例 RouteData routeData = this.RouteCollection.GetRouteData(context); if (routeData ! = null) { // 再从RouteData中获取MVCRouteHandler IRouteHandler routeHandler = routeData.RouteHandler ; var route = RouteTable.MatchRoutes(requestUrl, out routeData); if (route == ; public MvcHandler(IDictionary<string, object> routeData) { this.routeData var controllerName = routeData["controller"].ToString(); // 借助控制器工厂创建具体控制器实例

    1.9K20发布于 2018-08-21
领券