webapi的一些使用
近期在项目中使用到了webapi,遇到了一些可以学习改进的地方,其中涉及了一些知识,自己整理一下,方便记忆。
一.webapi的路由机制
1.配置文件一般放在UI层下的app—start文件夹下,名为WebApiConfig.cs文件,我们在这里配置默认路由。
配置文件的含义:
1.name:"DefaultApi"表示此路由的名称。注册多个路由时必须保证名称不重复。
2.routeTemplate:"api/{controller}/{id}"表示路由的匹配规则。api是固定必填值,这个值是可变的如果你把它改成“BalaApi”,那url就应该变成 “http://1.1.1.1:80/BalaApi/***”。
{controller}是控制器的占位符,在真实的url中,该部分对应的是具体的控制器名称。
这个和MVC一致的。{id}是形参id的占位符,id是形参的名字,一般这个参数都会在defaults中设置为可选。
3.defaults:new { id=RouteParameter.Optional }表示设置id为可选参数,routeTemplate中的{controller}和{id}都可以设置默认值。
这意味着,没有输入id参数时,也能访问到默认的无参Get方法,不写这行的话就访问不到。
若defaults改成new { controller="Pleasure", id = RouteParameter.Optional },那么我们请求http://1.1.1.1:80/api这个url仍然能访问到Pleasure控制器中的[HttpGet]方法。
4.constraints:new{ id = @"\d+" }表示为id添加约束。形参id不能为空而且必须是整数,优先匹配含参方法,也能匹配无参方法。
2.默认路由的匹配机制(webapi的路由机制的补充):
1.webapi默认路由机制的思想是:解析http请求的类型 {Post(增)、Delete(删)、Put(改)、Get(查)},匹配Action,也就是说,不必指定Action的名称。例如:/api/tip-rule,默认这个url就表示匹配tip-rule控制器下的[HttpGet]方法
2.同一个前缀RoutePrefix(“ ”)下。例如RoutePrefix(“api/tip-rule ”)如果http请求的类型不一样,那么拿到的方法也不一样。(默认Get)
这意味着,同样的{controller}控制器名,不同的请求方式,调用的是不同的Action方法。
3.路由解析规则由cs文件下的routeTemplate:"api/{controller}/{id}"定义,api是固定必填值,{controller}是必填的控制器名,{id}表示匹配的id形参,而且是可选参数(方法的参数列表中可以有名为id的形参,也可以没有)
这意味着,同样的{controller}控制器名,不同的入参,用的是不同的Action方法。
有带参的方法找不到时,也可以使用无参的方法,所以会进到无参的Action方法里。
4.webapi是支持指定的action,多了一层,思路相同。但是restful的风格下,不是很提倡。
3.不同http请求的参数形式问题
1.Get请求,入参一般是int,string等类型的入参
2.Post请求,入参一般是一个Model
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构