路由

简介: 创建路由    路由提供了Route类作为IRouter的标准实现。当调用RouteAsync方法时,Route使用路由模板语法定义匹配URL路径的模式,当调用GetVirtualPath方法时,Route会使用相同的路由模板生成URL。

创建路由

    路由提供了Route类作为IRouter的标准实现。当调用RouteAsync方法时,Route使用路由模板语法定义匹配URL路径的模式,当调用GetVirtualPath方法时,Route会使用相同的路由模板生成URL。

    大多数应用会通过调用MapRoute方法或定义在IRouteBuilder接口上的一个类似扩展方法来创建路由

    下面是两个典型的ASP.NET。MVC路由例子

routes.MapRoute(
    name: "default_route",
    template: "{controller}/{action}/{id?}",
    defaults: new { controller = "Home", action = "Index" });

routes.MapRoute(
    name: "default_route",
    template: "{controller=Home}/{action=Index}/{id?}");

使用路由中间件

    在使用路由前,需要添加依赖项 microsoft.aspnetcore.routing

   在Staup中添加路由到服务容器

public void ConfigureServices(IServiceCollection services)
{
       //添加路由服务
       services.AddRouting();
}

   路由必须在Startup类Configure方法中配置

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
           var trackPackageRouteHandler = new RouteHandler(context =>
             {
                 var routeVal = context.GetRouteData().Values;
                 return context.Response.WriteAsync($"Hello! Route values: {string.Join(", ", routeVal)}");
             });
            var routeBuilder = new RouteBuilder(app, trackPackageRouteHandler);
            routeBuilder.MapRoute(
                 "Track Package Route", "package/{operation:regex(^track|create|detonate$)}/{id:int}" );
//只允许Get请求 routeBuilder.MapGet("hello/{name}.{ext?}", context => { var name = context.GetRouteValue("name"); var ext = context.GetRouteValue("ext"); return context.Response.WriteAsync($"Hi,{name}.{ext}!"); }); var routes = routeBuilder.Build(); app.UseRouter(routes); }

 响应列表

URI Response
/package/create/3 Hello! Route values: [operation, create], [id, 3]
/package/track/-3 Hello! Route values: [operation, track], [id, -3]
/package/track/-3/ Hello! Route values: [operation, track], [id, -3]
/package/track/ <未通过,没有匹配>
GET /hello/Joe Hi, Joe!
POST /hello/Joe <未通过, 只匹配GET请求>
GET /hello/Joe/Smith <未通过,没有匹配>

   框架提供了一系列的创建路由扩展方法

  • MapRoute
  • MapGet
  • MapPost
  • MapPut
  • MapDelete
  • MapVerb        

路由约束

约束 示例 匹配示例 注释
int {id:int} 123 匹配所有整型
bool {active:bool} true 匹配 true 或 false
datetime {dob:datetime} 2016-01-01 匹配一个合法的 DateTime 值 (固定区域性 - 请看 options)
decimal {price:decimal} 49.99 匹配一个合法的 decimal 值
double {weight:double} 4.234 匹配一个合法的 double 值
float {weight:float} 3.14 匹配一个合法的 float 值
guid {id:guid} 7342570B- 匹配一个合法的 Guid 值
long {ticks:long} 123456789 匹配一个合法的 long 值
minlength(value) {username:minlength(5)} steve 至少5个字符串长。
maxlength(value) {filename:maxlength(8)} somefile 字符串不能超过8个字符长。
length(min,max) {filename:length(4,16)} Somefile.txt 字符串至少8个长度且不超过16个字符长度。
min(value) {age:min(18)} 19 值至少是18。
max(value) {age:max(120)} 91 值不能超过120。
range(min,max) {age:range(18,120)} 91 值必须介于18和120之间。
alpha {name:alpha} Steve 字符串必须是由字母字符组成。
regex(expression) {ssn:regex(^d{3}-d{2}-d{4}$)} 123-45-6789 字符串必须匹配提供的正则表达式。
required {name:required} Steve 用于在URL生成时强制必须存在值。

      验证URL可转为CLR类型(例如Int或DateTime)的路由约束总是使用固定区域性;它们认为URL是不可本地化的,框架提供的路由约束不会修改路由值,从URL解析过来的所有路由值都会存为字符串。例如,浮点路由约束会试图将路由值转换为一个浮点性,但转换后的值只用于验证它是否能够转换为浮点型

 

相关文章
|
前端开发 JavaScript 小程序
7 款最棒的开源 React UI 库测评 - 特别针对国内使用场景推荐
优秀的 React UI 组件库,帮我们节省开发时间,提高开发效率,统一设计语言。更棒的是内置的功能复杂,我们自己很难处理的常用组件,比如表格、表单、富文本编辑器、时间日期选择器、实时拖拽组件等,再进一步,还有帮我们把组件的轮子装好的 React admin 后台管理系统。本文推荐 7 款适用于中文使用者习惯的开源 React UI 库,特别针对国内使用场景推荐。
1311 0
|
存储 监控 算法
|
10月前
|
监控 安全 数据可视化
哪些项目适合采用BOT+EPC模式?深度解析
2分钟了解什么是BOT+EPC项目管理模式以及该模式适用于哪些类型的项目。
890 1
哪些项目适合采用BOT+EPC模式?深度解析
|
机器学习/深度学习 人工智能 算法
人工智能在医疗诊断中的应用与挑战
本文探讨了人工智能(AI)在医疗诊断领域的应用及其面临的挑战。随着技术的不断进步,AI已经在医学影像分析、疾病预测和个性化治疗等方面展现出巨大潜力。然而,数据隐私、算法透明度以及临床整合等问题仍然是亟待解决的关键问题。本文旨在通过分析当前AI技术在医疗诊断中的具体应用案例,探讨其带来的优势和潜在风险,并提出相应的解决策略,以期为未来AI在医疗领域的深入应用提供参考。
372 3
|
10月前
|
算法 搜索推荐 安全
通过算法备案之后就万事大吉了么?
在数字化时代,算法成为互联网企业的核心竞争力,但也带来了诸多风险。我国实施的算法备案制度是企业合规运营的起点,而非终点。备案后,企业还需严格遵守法规,保障用户知情权和选择权,避免个性化推送陷阱、隐私泄露、信息操纵等问题。同时,企业应加强自查自纠,完善算法管理制度,确保算法的公平性、透明性和安全性。监管部门也需加大治理力度,形成有效监管震慑,共同推动算法应用的健康发展。
|
分布式计算 大数据 Apache
Apache Spark & Paimon Meetup · 北京站,助力 LakeHouse 架构生产落地
2024年11月15日13:30北京市朝阳区阿里中心-望京A座-05F,阿里云 EMR 技术团队联合 Apache Paimon 社区举办 Apache Spark & Paimon meetup,助力企业 LakeHouse 架构生产落地”线下 meetup,欢迎报名参加!
398 59
|
10月前
|
机器学习/深度学习 机器人
《解密奖励函数:引导智能体走向最优策略》
在强化学习中,奖励函数是核心要素,指导智能体学习与决策。它通过明确目标、合理分配奖励和考虑环境因素,激励智能体探索最优策略。设计恰当的奖励函数能让智能体在复杂环境中不断优化行为,实现长期目标。即时、延迟和全局奖励的不同类型,以及奖励函数的稳定性和适应性,都是设计时需关注的重点。
448 13
|
网络协议 网络安全 数据安全/隐私保护
|
存储 开发者
递归比较的优缺点是什么?
【10月更文挑战第29天】递归比较是一种在处理复杂数据结构时常用的比较方法,尤其适用于对象和数组等引用类型数据的深度比较。
|
数据采集 缓存 安全
2024年最佳http 代理 IP选择及其价格分析
2024年,多家服务商如快代理、123Proxy、巨量代理、IPIDEA等提供不同类型的代理IP,以满足数据采集、跨境电商等多种需求。
2024年最佳http 代理 IP选择及其价格分析