C#进阶之WebAPI(三)

今天复习一下WebAPI的路由知识:

首先分析一下MVC路由和WebAPI路由的区别

在mvc里,默认的路由机制是通过URL路径去匹配控制器和Action方法的,在mvc中的默认路由定义在App_Start文件夹下的RouteConfig.cs文件下:

复制代码

public class RouteConfig{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 });}}

复制代码

在webapi里,默认的路由机制是通过URL路径去匹配控制器,然后通过http的方法去匹配Action的,在WebAPI中的默认路由定义在App_Start文件夹下的WebApiConfig.cs文件下:

复制代码

public static class WebApiConfig{public static void Register(HttpConfiguration config){// Web API 配置和服务// Web API 路由config.MapHttpAttributeRoutes();config.Routes.MapHttpRoute(name: "RestFulApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });}}

复制代码

 

WebApi的路由基础:

将MapHttpRoute方法转定义有4个重载的方法:

复制代码

 //// 摘要://     映射指定的路由模板。//// 参数://   routes://     应用程序的路由的集合。////   name://     要映射的路由的名称。////   routeTemplate://     路由的路由模板。//// 返回结果://     对映射路由的引用。public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate);//// 摘要://     映射指定的路由模板并设置默认路由值。//// 参数://   routes://     应用程序的路由的集合。////   name://     要映射的路由的名称。////   routeTemplate://     路由的路由模板。////   defaults://     一个包含默认路由值的对象。//// 返回结果://     对映射路由的引用。public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate, object defaults);//// 摘要://     映射指定的路由模板并设置默认路由值和约束。//// 参数://   routes://     应用程序的路由的集合。////   name://     要映射的路由的名称。////   routeTemplate://     路由的路由模板。////   defaults://     一个包含默认路由值的对象。////   constraints://     一组表达式,用于指定 routeTemplate 的值。//// 返回结果://     对映射路由的引用。public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate, object defaults, object constraints);//// 摘要://     映射指定的路由模板并设置默认的路由值、约束和终结点消息处理程序。//// 参数://   routes://     应用程序的路由的集合。////   name://     要映射的路由的名称。////   routeTemplate://     路由的路由模板。////   defaults://     一个包含默认路由值的对象。////   constraints://     一组表达式,用于指定 routeTemplate 的值。////   handler://     请求将被调度到的处理程序。//// 返回结果://     对映射路由的引用。public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate, object defaults, object constraints, HttpMessageHandler handler);

复制代码

看看每个参数的作用:

name:表明路由的名称,注册多个路由时保证不重复就行;

routeTemplate:路由匹配规则。默认是“api/{controller}/{id}”,前面的api是用来区分mvc路由的,不是必选项,是可变的,{controller}是控制器的占位符,{id}是形参的占位符;

defaults:一个包含默认路由值的对象,可以设置controller的默认值;

constraints:对形参的约束;



注册的路由是按照注册先后的顺序进行匹配的,注册越靠前,优先级越大

我们知道,WebApi是符合RESTful风格的,那么如果在一个控制器内部,我们需要提供多个相同的http方法,相同参数的接口我们应该怎么解决呢?

1:活用[Route("")]

在相同请求方法的action的前面可以加上[Route]路由特性进行区分:
 

复制代码

/// <summary>
/// 这里可以通过http://localhost:xxxx/api/Values对这个action进行访问
/// </summary>
/// <returns></returns>
public IEnumerable<string> Get1()
{
return new string[] { "value1", "value2" };
}
/// <summary>
/// 这里可以通过http://localhost:xxxx/apis/Values/qqqqq对这个action进行访问
/// </summary>
/// <returns></returns>
[Route("apis/Values/qqqqq")]
public IEnumerable<string> Get2()
{
return new string[] { "value3", "value4" };
}

复制代码


 

 和朋友聊了一下,发现这个做法本身就和RESTful风格相抵触,所以就不深究了,一般是对action进行重载,而不是在这上面想办法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里一面 —— HTTP中重定向和请求转发的区别?

马上就要到金三银四佳季了&#xff0c;是找工作的好时候&#xff0c;小伙伴们一定要把握好时机&#xff0c;找到心仪的高薪工作。找工作就少不了面试&#xff0c;那我们从现在开始&#xff0c;多刷刷面试题&#xff0c;查缺补漏&#xff01;&#xff01;&#xff01; 目录 ⭐T…

C#异步编程-------异步编程模型(APM)

术语解释&#xff1a; APM 异步编程模型&#xff0c; Asynchronous Programming Model EAP 基于事件的异步编程模式&#xff0c; Event-based Asynchronous Pattern TAP 基于任务的异步编程模式&#xff0c; Task-based Asynch…

【LeetCode-SQL每日一练】—— 627. 变更性别

&#x1f388;写在前面 &#x1f64b;‍♂️大家好呀&#xff0c;我是超梦。大家可以叫我小梦~ 又到了练习SQL的时候啦&#xff01;一起来学习吧&#xff01; &#x1f64b;‍♂️ 小伙伴们如果在学习过程中有不明白的地方&#xff0c;欢迎评论区留言提问&#xff0c;小梦定知无…

iis运行原理 Asp.Net详解IIS内部运行原理

本章节主要讲IIS和 管道内部如何处理客户端Http请求&#xff0c;会较多的以代码的形式讲述&#xff0c;让大家对HttpApplication、HttpHandler、HttpApplicationFactory、Page这几个在处理请求过程中扮演重要角色的对象有更深入的了解。 下面我们通过单步调式跟踪System.Web.D…

【LeetCode-SQL每日一练】—— 1179. 重新格式化部门表

&#x1f388;写在前面 &#x1f64b;‍♂️大家好呀&#xff0c;我是超梦。大家可以叫我小梦~ 又到了练习SQL的时候啦&#xff01;一起来学习吧&#xff01; &#x1f64b;‍♂️ 小伙伴们如果在学习过程中有不明白的地方&#xff0c;欢迎评论区留言提问&#xff0c;小梦定知无…

阿里一面 —— 什么是多线程?

马上就要到金三银四佳季了&#xff0c;是找工作的好时候&#xff0c;小伙伴们一定要把握好时机&#xff0c;找到心仪的高薪工作。找工作就少不了面试&#xff0c;那我们从现在开始&#xff0c;多刷刷面试题&#xff0c;查缺补漏&#xff01;&#xff01;&#xff01; 目录 ⭐什…

第九节:JWT简介和以JS+WebApi为例基于JWT的安全校验

一. 简介 1. 背景 传统的基于Session的校验存在诸多问题&#xff0c;比如&#xff1a;Session过期、服务器开销过大、不能分布式部署、不适合前后端分离的项目。 传统的基于Token的校验需要存储Key-Value信息&#xff0c;存在Session或数据库中都有弊端&#xff0c;如果按照一…

赢在CSDN —— 我们一起向前

赢在CSDN&#xff0c;一起向前&#xff01; ⭐初遇CSDN ⭐我也成为了一名创作博主 ⭐如何在CSDN赚到一桶金 ⭐CSDN带给自己的成长 ⭐对CSDN的期待 ⭐个人创作的规划 ⭐初遇CSDN 不知不觉来到CSDN已经有1379天的时间啦&#xff0c;时间过得好快呀&#xff01;记得刚踏进CS…

volatile关键字的作用-适用场景

volatile在Java并发编程中常用于保持内存可见性和防止指令重排序。内存可见性&#xff08;Memory Visibility&#xff09;&#xff1a;所有线程都能看到共享内存的最新状态&#xff1b;防止指令重排&#xff1a;在基于偏序关系的Happens-Before内存模型中&#xff0c;指令重排技…

MySQL你掌握了多少?这些SQL题你能作对几道?

MySQL是工作中常用数据库&#xff0c;必须掌握&#xff0c;但小伙伴们又掌握了多少呢&#xff0c;今天一起来测试一下吧~ 力扣SQL ⭐组合两个表 ⭐第二高的薪水 ⭐超过经理收入的员工 ⭐查找重复的电子邮箱 ⭐从不订购的客户 ⭐大的国家 ⭐删除重复的电子邮箱 ⭐有趣的…

mybatis配置文件加注释报错怎么办?改一笔就能帮你解决

今天配置mybatis写了一个小demo&#xff0c;本以为顺顺利利的就完成了&#xff0c;没想到就报了如下错误。直接emo了。 java.lang.ExceptionInInitializerErrorat com.lm.learn.dao.UserTest.getUsers(UserTest.java:14)at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ…

第十二节:深究内核模式锁的使用场景(自动事件锁、手动事件锁、信号量、互斥锁、读写锁、动态锁)

一. 整体介绍 温馨提示&#xff1a;内核模式锁&#xff0c;在不到万不得已的情况下&#xff0c;不要使用它&#xff0c;因为代价太大了&#xff0c;有很多种替代方案。 内核模式锁包括&#xff1a; ①&#xff1a;事件锁 ②&#xff1a;信号量 ③&#xff1a;互斥锁 ④&#xf…

玩转Mybatis —— 一个小demo,带你快速入门Mybatis

目录 &#x1f91e;Mybatis官网介绍 &#x1f91e;Mybatis安装 &#x1f91e;Mybatis核心配置文件 &#x1f91e;构建 SqlSessionFactory &#x1f91e;获取 SqlSession &#x1f91e;通过 XML 定义已映射的 SQL 语句 &#x1f91e;作用域&#xff08;Scope&#xff09;…

MySQL掌握的怎么样?听说这几道MySQL面试题没有几个人能答得出来

MySQL可谓是程序员必备技能&#xff0c;怎么检测自己掌握了多少呢&#xff0c;一起来测试一下吧&#xff01;一共12个关卡&#xff0c;看看你能闯到第几关&#xff1f; 目录 什么是左外链接&#xff0c;什么是右外链接&#xff1f; 分页关键字是什么&#xff1f; Select 语句…

IIS/ASP.NET 管道

ASP.NET MVC 是建立在 ASP.NET 平台上基于 MVC 模式的 Web 应用框架&#xff0c;深刻理解 ASP.NET MVC 的前提是对 ASP.NET 管道式设计具有深刻的认识。由于 ASP.NET Web 应用大都寄宿于 IIS 上&#xff0c;将两者结合起来了解在 IIS 和 ASP.NET 管道中是如何流动的。 IIS5.x与…

【JAVA知识点每日一练】 —— 运算符的那些事

都说基础不牢地动山摇&#xff0c;还真是那么回事&#xff01;别小看这运算符&#xff0c;每个语法中运算符扮演者举足轻重的角色&#xff0c;稍微没用对&#xff0c;那可就犯了大错误&#xff01; 接下来跟随小梦&#xff0c;迈着轻松且愉快的步伐一起看看运算符的那些事吧~ 运…

ASP.NET Core管道深度剖析[共4篇]

在《管道是如何处理HTTP请求的&#xff1f;》中&#xff0c;我们对ASP.NET Core的请求处理管道的构成以及它对请求的处理流程进行了详细介绍&#xff0c;接下来我们需要了解的是这样一个管道是如何被构建起来的。这样一个管道由一个服务器和一个HttpApplication构成&#xff0c…

SQL为什么动不动就百行以K记?

发明SQL的初衷之一显然是为了降低人们实施数据查询计算的难度。SQL中用了不少类英语的词汇和语法&#xff0c;这是希望非技术人员也能掌握。确实&#xff0c;简单的SQL可以当作英语阅读&#xff0c;即使没有程序设计经验的人也能运用。 然而&#xff0c;面对稍稍复杂的查询计算…

深入理解happens-before和as-if-serial语义

本文大部分整理自《Java并发编程的艺术》&#xff0c;温故而知新&#xff0c;加深对基础的理解程度。下面可以和小编来一起学习下 概述 本文大部分整理自《Java并发编程的艺术》&#xff0c;温故而知新&#xff0c;加深对基础的理解程度。 指令序列的重排序 我们在编写代码…

开源SPL重新定义OLAP Server

OLAP&#xff08;Online Analytical Processing&#xff09;是指在线联机分析&#xff0c;基于数据查询计算并实时获得返回结果。日常业务中的报表、数据查询、多维分析等一切需要即时返回结果的数据查询任务都属于OLAP的范畴。对应的&#xff0c;行业内也有相应产品来满足这类…