路由是个啥东西?有啥用?官方说路由系统通过添加终结点,构建在中间件管道之上。路由负责匹配传入的 HTTP URL请求,然后将这些请求发送到应用的可执行终结点,那啥又是终结点啊?终结点代表应用的功能单元.整体看来,大概意思就是,当我们发起HTTP请求时,路由会负责匹配请求路径和HTTP的请求方法,然后执行我们注册好的实现方法。
注册路由
注册路由,一般通过WebApplication对象或者Route特性两种方式,WebApplication继承了IEndpointRouteBuilder接口,微软配置了EndpointRouteBuilderExtensions扩展类来注册路由
该扩展类为我们提供了分别对应HTTP请求方式的注册方法,
如果我们要注册一个GET请求的路由,则直接使用app.MapGet()方法
这里我们注册一个简单的路由app.MapGet("/hello", () => "Hello World!");,此时直接通过localhost:port/hello便可以访问到该路由
通过特性注册路由
这里,我们新建一个名为RouteController的控制器类,在我们通过VS新建一个WebApi的控制器时,模板会自动在Controller类为我们添加上[Route("api/[controller]")],该路由以为着我们需要通过/api/控制器名来访问该控制器,这时候,会根据HTTP的请求方式来匹配该路径下的方法
此时该类下面并没有相应规则的实际可执行方法,那么当我们直接访问/api/route,便会提示404,
如果,我们在RouteController控制器中写一个简单的方法,
它会把该方法注册来路由中,因为没有指定HTTP的请求方式,此时,不管是GET还是POST,或者其他请求方式,都可以访问到该路由
在RESTful架构中,需要规范我们的名称和HTTP请求方式,不同的请求方式来处理不同的业务。在ASP.NET Core 6.0中,我们可以通过HttpMethod来指定请求方式
|
|
当我们在Hello方法加上HttpGet,表示该方法只能通过GET请求方式才能执行。
Route特性不仅可以作用于Controller类,还可以在方法上
路由模板
Route特性参数可以传入模板字符串,在Route参数中加入一对{}符号,{}符号里面便是方法参数名,如:
|
|
此时,我们访问接口时就必须跟上{name}的值,否则会提示404
除了Route可以传入模板字符串外,其实HttpGet这类特性也可以做类似Route路由的工作,并也可以传入字模板符串
为了防止用户恶意传入非法参数,ASP.NET Core 6.0也提供了路由约束,它会按照规则去匹配参数是否符合规则
,如果不符合,则会直接返回404,如:
|
|
如果URL中name这个参数的占位符长度小于2或者大于5,都会提示404
当然,也可以官方提供的规则不能满足你的要求,别担心,它还给我们提供了正则匹配,如果还是不满足,咱们还可以继承IRouteConstraint接口来自定义。
其实路由这一小节东西非常多,要学习完得花些时间了,这里只是走马观花式的大概了解一下常用的基础内容。
版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除