上面我们利用app.Use来检测匹配元数据,假如匹配乐成我们就执行对应的操纵。我们称之为终端中间件,为什么是终端中间件呢,因为这里会遏制搜索执行匹配和操纵、最后返回。
那么对较量下终端中间件和路由有什么区别呢?
这两种要领都答允终止处理惩罚管道:终端中间件答允在管道中的任意位置安排中间件:
中间件通过返回而不是挪用 next 来终止管道。
终结点始终是终端。
终端中间件答允在管道中的任意位置安排中间件:
终结点在 UseEndpoints 位置执行。
终端中间件答允任意代码确定中间件匹配的时间:
自界说路由匹配代码大概较量巨大,且难以正确编写。
路由为典范应用提供了简朴的办理方案。
大大都应用不需要自界说路由匹配代码。
带有中间件的终结点接口,如 UseAuthorization 和 UseCors。
通过 UseAuthorization 或 UseCors 利用终端中间件需要与授权系统举办手动交互
上面我们知道了通过UseRouting向中间件添加路由匹配,然后通过UseEndpoints界说终结点去执行匹配委托。那么在MVC模式中如何配置呢?我们看看传统路由的配置要领。
app.UseEndpoints(endpoints => { app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); });
上面我们配置传统路由的时候回收的是endpoints.MapControllerRoute();,个中附带有两个参数,一个是名称default,第二个则是路由模板。我们看路由模板{controller=Home}/{action=Index}/{id?},那么在匹配Url路径的时候,譬喻执行路径 WeatherForecast/Index/5。那么则会匹配节制器为WeatherForecast,个中要领是Index而且参数是int范例的一个处理惩罚要领。
REST Api 的属性路由上面讲的是传统路由配置,那么对付Api项目标路由配置是如何的呢?REST Api 应利用属性路由将应用成果建模为一组资源。我们看下示例代码
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
在上面的代码中利用MapControllers挪用。映射属性路由。我们看在利用的时候属性路由的利用方法。
Route[]
下面的示例中我们回收的是Route[]的方法,它既可单独浸染域节制器也可单独浸染域action。也可同时利用。
[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { [Route("Index")] public string Index(int? id) { return "Test"; } }
[ApiController] [Route("[controller]/[action]")] public class WeatherForecastController : ControllerBase { public string Index(int? id) { return "Test"; } }
[ApiController] public class WeatherForecastController : ControllerBase { [Route("[controller]/Index")] public string Index(int? id) { return "Test"; } }
Http[Verb]
回收Http[Verb]的方法那就仅仅能浸染在action上了。好比下面的就直接在Index上方写[HttpGet
("[controller]/Index")],其他就是HttpPost、HttpDelete等等操纵 [ApiController] public class WeatherForecastController : ControllerBase { [HttpGet("[controller]/Index")] public string Index(int? id) { return "Test"; } }
Route[]和Http[Verb]殽杂利用
有时在实际运用中也可以采纳两种方法殽杂利用的,譬喻下面的示例在节制器回收Route[],在action回收Http[Verb]。因为一般界说Api的时候我们不只要标注action名称,我们还需要知道action的请求方法。
[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { [HttpGet("Index")] public string Index(int? id) { return "Test"; } }
总结到此这篇关于.Net Core路由处理惩罚的文章就先容到这了,更多相关.Net Core路由处理惩罚内容请搜索剧本之家以前的文章或继承欣赏下面的相关文章但愿各人今后多多支持剧本之家!
您大概感乐趣的文章: