iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >ASP.NET MVC实现路由功能
  • 146
分享到

ASP.NET MVC实现路由功能

ASP.NET MVC路由功能 2022-11-13 13:11:52 146人浏览 薄情痞子
摘要

1、定义路由、路由规则 public static void ReGISterRoutes(RouteCollection routes) {

1、定义路由、路由规则

        public static void ReGISterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

路由是什么?

Route派生于RouteBase基类,如下:

路由能提供什么?

● 通过路由的GetRouteData()方法,获取到封装路由信息的RouteData类型;
● 通过路由的Constraints属性获取路由约束;
......

MapRoute()是RouteCollection的扩展方法:

RouteCollection是什么?

RouteCollection是RouteBase的集合类。

2、注册路由规则

在全局文件中注册路由规则:

    public class mvcApplication : System.WEB.HttpApplication
    {
        protected void Application_Start()
        {
            ......
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            ......
        }
    }

原来,所有的路由规则都存放在RouteTable中类型为RouteCollection的Routes属性中了。

3、UrlRoutingModule处理url请求,输出MvcHandler以处理HTTP请求

UrlRoutingModule实现IHttpModule接口,对HttpApplication的PostResolveRequest事件进行侦听:

public class UrlRoutingModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PostResolveRequestCache += OnPostResolveRequestCache;
    }

    portected virtual void OnPostResolveRequestCache(object sender, EventArgs e)
    {
        //把当前上下文封装
        HttpContextWrapper httpContext = new HttpContextWrapper(HttpContext.Current);

        //获取当前请求中的RouteData类型
        RouteData routeData = RouteTable.Routes.GetRouteData(httpContext);
        if(routeData == null)
        {
            return;
        }

        //把routeData再封装起来
        RequestContext requestContext = new RequestContext{
            RouteData = routeData,
            HttpContext = httpContext
        };

        //从RouteData的RouteHandler属性获取IRouteHandler类型
        //IRouteHandler的GetHttpHandler()方法获取IHttpHandler
        IHttpHandler handler = routeData.RouteHandler.GetHttpHandler(requestContext);

        //为当前上下文设置HttpHandler,用于对当前HTTP请求的处理
        httpContext.RemapHandler(handler);
    }
}

IRouteHandler是什么?

他的唯一职责是生产IHttpHandler实例。

public interface IRouteHandler
{
    IHttpHandler GetHttpHandler(RequestContext requestContext);
}

在MVC中默认使用的是MvcRouteHandler,是IRouteHandler的实现,返回类型为IHttpHandler的MvcHandler:

public class MvcRouteHandler : IRouteHander
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new MvcHandler(requestContext);
    }
}

MvcHandler是MVC中IHttpHandler的默认实现

public class MvcHandler : IHttpHandler
{
    publci bool IsReusable{get {return false;}}

    public RequestContext RequestContext{get; private set;}

    public MvcHandler(RequestContext requestContext)
    {
        this.RequestContext = requestContext;
    }

    public void ProcessRequest(HttpContext context)
    {
        string controllerName = this.RequestContext.RouteData.Controller;
        IControllerFactory controllerFactory = COntrollerBuilder.Current.GetControllerFactory();
        IController controller = controllerFactory.CreateController(this.RequestContext, controllerName);
        controller.execute(this.RequestContext);
    }
}

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对编程网的支持。如果你想了解更多相关内容请查看下面相关链接

--结束END--

本文标题: ASP.NET MVC实现路由功能

本文链接: https://www.lsjlt.com/news/171303.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET MVC实现路由功能
    1、定义路由、路由规则 public static void RegisterRoutes(RouteCollection routes) { ...
    99+
    2022-11-13
    ASP.NET MVC 路由功能
  • ASP.NET MVC实现区域路由
    目录一、区域路由二、示例程序1、新建区域路由2、注册区域路由2.1、区域路由文件2.2、全局注册区域路由三、测试区域路由一、区域路由 为了管理网站中大量的文件,在ASP.NET MV...
    99+
    2022-11-13
  • ASP.NET Core中MVC模式实现路由一
    目录1.前言2.设置路由中间件3.传统路由4.多个路由4.1定义多个路由4.2区分操作5.属性路由5.1 属性路由5.2 使用 Http[Verb] 属性的属性路由5.3合并路由5....
    99+
    2022-11-13
  • ASP.NET Core中MVC模式实现路由二
    目录1.URL生成2.URL生成方式2.1根据操作名称生成URL2.2根据路由生成URL2.3在HTML中生成URL2.4在操作结果中生成URL3.区域(Area)4.实现IActi...
    99+
    2022-11-13
  • ASP.NET Core中MVC模式怎么实现路由
    这篇“ASP.NET Core中MVC模式怎么实现路由”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ASP.NET...
    99+
    2023-06-29
  • ASP.NET Core MVC路由怎么用
    本篇内容介绍了“ASP.NET Core MVC路由怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! AS...
    99+
    2023-06-30
  • ASP.NET Core MVC路由(Routing)的用法
    目录1.设置路由中间件2.常规路由3.多路由1.回退2.行动歧义3.路由名称4.路由特性5.组合路由6.特性路由的顺序7.路由模板中的标记替换( [controller] , [ac...
    99+
    2022-11-13
  • ASP.NET MVC中的路由原理与用法
    目录一、概述二、路由原理1、注册路由2、路由匹配2.1、匹配方式一2.2、匹配方式二2.3、匹配方式三3、URL参数默认值3.1、参数默认值一3.2、参数默认值二3.4、参数默认值三...
    99+
    2022-11-13
  • nodejs中实现路由功能
    初学Node,发现了与自己之前的观点完全不同的场面——你眼中的JavaScript,是干什么用的呢?特效?or 只是与客户端的交互?可以说,JavaScript最早是运行在浏览器中的,然而你要这样想,浏览器...
    99+
    2022-06-04
    路由功能 nodejs
  • ASP.NET Core3.1 Ocelot路由的实现
    1.路由 前一个章节我们已经介绍过Ocelot,相信大家也了解到,Ocelot的主要功能是接收客户端等传入的HTTP请求,并将其转发到下游服务。Ocelot当前仅以另一个htt...
    99+
    2022-06-07
    net ASP.NET core ASP
  • ASP.NET MVC使用typeahead.js实现输入智能提示功能
    使用typeahead.js可以实现预先输入,即智能提示,本篇在ASP.NET MVC下实现。实现效果如下: 首先是有关城市的模型。 public class City ...
    99+
    2022-11-13
  • nodeJS实现路由功能实例代码
    前面的话 本文将使用NodeJS实现较复杂应用的路由功能 结构 项目结构如下 代码如下 功能 【router.js】 // 加载所需模块 var http = require('http');...
    99+
    2022-06-04
    实例 代码 路由功能
  • 怎么给ASP.NET MVC及WebApi添加路由优先级
    本篇内容介绍了“怎么给ASP.NET MVC及WebApi添加路由优先级”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、为什么需要路由优先...
    99+
    2023-06-17
  • 怎么用Vue-Router实现路由功能
    这篇“怎么用Vue-Router实现路由功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用Vue-Router实现路由...
    99+
    2023-07-04
  • 如何使用nodejs实现路由功能
    这篇文章将为大家详细讲解有关如何使用nodejs实现路由功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。结构  项目结构如下  代码如下功能【router.js】// 加载所需模块var&nb...
    99+
    2023-06-14
  • 怎样使用nodejs实现路由功能
    这篇文章主要介绍怎样使用nodejs实现路由功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!结构项目结构如下代码如下功能【router.js】// 加载所需模块var http =&n...
    99+
    2023-06-06
  • Node.js自定义实现文件路由功能
    一、创建路由处理定义 //获取http模块 var http = require('http'); //文件 模块 var fs = require('fs'); //404文件 var e...
    99+
    2022-06-04
    自定义 文件 路由功能
  • 如何使用Vue-Router2实现路由功能
    这篇文章主要为大家展示了“如何使用Vue-Router2实现路由功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用Vue-...
    99+
    2022-10-19
  • ASP.NETCore中的Razor页面实现路由功能
    在服务器端 Web 应用程序框架中,其中非常重要的设计是开发人员如何将URL与服务器上的资源进行匹配,以便正确的处理请求。最简单的方法是将 URL 映射到磁盘上的物理文件,在 Raz...
    99+
    2022-11-13
  • ASP.NET Core使用功能开关控制路由访问操作
    目录前言:1.功能开关3.实现3.使用结论:前言: 在前面的文章,我们介绍了使用Middleware有条件地允许访问路由(《ASP.NET Core使用Middleware...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作