接着讲asp.net core web开发,这节讲路由系统(Route)。

在asp.net core中通过路由来将请求映射到对应的action,主要用到两个中间件,UseRouting()和UseEndpoints() 前者用于设置请求和action的映射关系,后者用于请求没有对应action的情况(一般是设置路由到主页,或者错误页面)

MVC中路由到控制器

 一个新建的mvc模板,最后一个中间件默认是:

app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});

这是一个传统路由,用于将请求映射到控制器的action,默认是访问home控制器下的index界面,并且支持使用REST风格传入一个可空参数(不是必须的),也就是/{id?}这个项,我们也可以自己定义这个路由规范,改成自己特定的路径。

HTTP谓词模板

   http谓词模板有:

HttpGet HttpPost HttpPut HttpDelete HttpHead HtttpPatch

它们也是路由的一种,一般用在web api中,用来限制为某种请求,从字面上也能看出它们的作用,标记为HttpGet路由的action,只能接受GET请求。

Web API 中的路由规范

在web api中,一般会使用ApiController这个特性标记控制器,它的作用仅返回序列化的数据,不会返回视图,下面看段代码:

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});

通过VS脚手架生成的web api模板,它的终点路由是映射到控制器,没有做什么默认化,所以需要控制器自己定义路由,在生成的控制器中,默认的路由为:

 [Route("[controller]")]
public class WeatherForecastController : ControllerBase
{}

[controller]会自动转化为控制器名称,这点跟MVC一样,api一般会用到HTTP谓词模板:

[HttpPost(upload/postdata)]
public string Post()
{
return "error";
}

这样限制了访问的方法必须是Post,而且我们可以自定义url路径,上述代码我将Post()action的访问形式改为最后的路径必须是upload/postdata

总的来说,使用路由,可以避免action名称直接暴露在外面,并且限制请求方法对action的访问,可以增强安全性。

这是我的公众号二维码,获取最新文章,请关注此号

最新文章

  1. PHP实现RTX发送消息提醒
  2. sql查询重复数据
  3. android nfc中Ndef格式的读写
  4. 闭包内的微观世界和js垃圾回收机制
  5. 启动受管服务器出现:unable to get file lock, will retry...
  6. Java static解析
  7. iOS开发常用的第三方框架
  8. c# 读取ACCESS 数据库
  9. 位图文件(BMP)格式以及Linux下C程序实现(转)
  10. iPhone 屏幕分辨率
  11. .Net轻量级ORM-NPoco的使用方法-摘自NPoco国外官方Wiki
  12. Phpcms 前台页面实现分页
  13. 开博近一年的感想 by 程序员小白
  14. Apache Solr入门教程(转)
  15. 来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor
  16. 【Spark 深入学习 02】- 我是一个凶残的spark
  17. python3 开发面试题(面向对象)6.6
  18. MTK 锁屏配置
  19. windows 环境下安装elasticsearch ,ik,head,marvel
  20. ubuntu64位库

热门文章

  1. python程序控制结构
  2. Spring基于XML的IoC
  3. Hive中静态分区和动态分区总结
  4. 3w 字长文爆肝 Java 基础面试题!太顶了!!!
  5. [2020年10月28日普级组]1406.SMRTFUN
  6. BUAA_2021_SE_READING_#2
  7. OO_Unit1_表达式求导总结
  8. 动态的创建Class对象方法及调用方式性能分析
  9. python2爬取国家统计局全国省份城市区街道信息
  10. SpringBoot-容器启动的时候执行一些内容