接着讲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的访问,可以增强安全性。

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

Asp.NetCore Web开发之路由的更多相关文章

  1. Asp.NetCore Web开发之模型验证

    在开发中,验证表单数据是很重要的一环,如果对用户输入的数据不加限制,那么当错误的数据提交到后台后,轻则破坏数据的有效性,重则会导致服务器瘫痪,这是很致命的. 所以进行数据有效性验证是必要的,我们一般通 ...

  2. Asp.NetCore Web开发之创建项目

    ​这一节,开始讲一下如何创建一个Asp.netCore Web项目,有两种常用的方式,一种是通过.NetCore SDK使用命令创建,另一种如果你使用的VisualStudio,可以直接根据引导创建. ...

  3. Asp.NetCore Web开发之初始文件解析

    在写代码之前,有必要了解一下.net帮我们生成的文件都是干什么用的,在开发过程中他们都负责那些地方(下面以MVC模板举例). 先简单介绍一下什么是MVC,MVC(model-view-controll ...

  4. Asp.NetCore Web开发之会话技术

    这节讲一下会话技术,首先了解一下什么是会话,会话是指浏览器打开到关闭的过程中,多次与服务器发送接收数据的过程. 由于HTTP是无状态协议,一次请求响应过后,产生的数据就随之释放了,可是在某些情况下,我 ...

  5. Asp.NetCore Web开发之跨域问题

    在前后端分离的web开发中,解决跨域问题是不可避免的,为什么会出现跨域问题呢,这主要是因为web中的"同源策略",浏览器出于安全原因,不让用户随便访问不同于当前站点的资源,也就是说 ...

  6. Asp.NetCore Web开发之RazorPage

    这节讲一下Razor页面. 首先要明确,Razor 不是一种编程语言.它是服务器端的标记语言,配合C#语言,就可以像PHP语言语言一样(但它们并不相同),处理HTML页面逻辑.它是Asp.NetCor ...

  7. Asp.NetCore Web应用程序中的请求管道和中间件

    你是否会迷惑当我们请求一个ASP.NetWeb应用程序以后,它是怎么处理这些请求的,后台是怎么工作的,今天就讲一下Asp.NetCore Web应用程序中的请求处理过程. 上一节,我们讲到,Start ...

  8. ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?

      ASP.NET MVC 的路由实际上是建立在 ASP.NET 的路由系统之上的. MVC 路由注册通常是这样的: RouteTable 是一个全局路由表, 它的 Routes 静态属性是一个 Ro ...

  9. 基于gin的golang web开发:路由

    Gin是一个用Golang编写的HTTP网络框架.它的特点是类似于Martini的API,性能更好.在golang web开发领域是一个非常热门的web框架. 启动一个Gin web服务器 使用下面的 ...

随机推荐

  1. 最小生成树(Prim算法,Kruskal算法 )

    声明:图片及内容基于https://www.bilibili.com/video/BV1yp4y1Q74o?from=articleDetail 最小生成树原理 . 普利姆(Prim)算法 原理 Pr ...

  2. irace package -- 参数调优神器

    目录 1. irace 是什么 2. 安装 irace 3. irace 的运行机制 4. irace 的配置环境 4.1. parameters 4.2. target algorithm runn ...

  3. oo第四单元与课程总结

    Part1 本单元三次作业架构设计总结 1.组织结构 由于官方代码中已经给我们提供了许多零散的类元素,如UmlClass``UmlAssociation``UmlParameter等,因此我首先将某些 ...

  4. ASP.NET Core扩展库之Http通用扩展

    本文将介绍Xfrogcn.AspNetCore.Extensions扩展库对于Http相关的其他功能扩展,这些功能旨在处理一些常见需求, 包括请求缓冲.请求头传递.请求头日志范围.针对HttpClie ...

  5. 【CTF】WDCTF-finals-2017 3-11 writeup

    题目来源:WDCTF-finals-2017 题目链接:https://adworld.xctf.org.cn/task/answer?type=misc&number=1&grade ...

  6. 火狐兼容selenium版本解决

    火狐和selenium不是很好兼容,下面提供一些我所知道的可以兼容的版本: 1. 火狐52+selenium 3.3 +geckodriver v0.15.0 2.火狐59+selenium 3.11 ...

  7. 算法图解...pdf

    电子书资源:算法图解 书籍简介   本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量.书中的前三章将帮助你打下基础,带你学习二分查找.大O表示法. ...

  8. JAVAEE_Servlet_14_HttpServletRequest接口以及常用方法(一)

    HttpServletRequest接口 * javax.servlet.http.HttpServletRequest 接口 * 继承关系 HttpServletRequest---继承---> ...

  9. Redis——急速安装并设置自启(CentOS)

    现状 对于开发人员来说,部署服务器环境并不是一个高频操作.所以就导致绝大部分开发人员不会花太多时间去学习记忆,而是直接百度(有一些同学可能连链接都懒得收藏).所以到了部署环境的时候就头疼,甚至是抗拒. ...

  10. k8s 使用nfs做provisioner

    官方的nfs provisoner,serviceAccount RABC相关 请在这里下载https://raw.githubusercontent.com/kubernetes-incubator ...