路由前缀就是我们所说的api/values里的api,这里的api可以用其它具体含义的字符表示,如Shop,Order,Game,它可以表示一个个模块,这一般在单体架构里;也可以是一个个小服务,这一般在微服务架构里.
对于基于微服务的设计理念里,我们每个模块都成了一个网站,一个服务,它们的路由应该具有一定的可读性,不能都是api/v1,api/v2了,我们最好可以统一天入口添加它,默认地,这种前缀是在控制器上添加特性来实现的,例如:
[Produces("application/json")] [Route("api/v1/EF")] public class EFController : Controller
而如果希望统一设置前缀,我们需要自己添加扩展方法,像IApplicationModelConvention集合里添加自己的路由前缀,一般地作法是在.net core startup类里添加扩展的注入,当然前提是你要设计扩展方法来实现对这个集合的insert操作.
/// <summary> /// 路由扩展 /// </summary> public static class RoutePrefixExtensions { /// <summary> /// 添加自定义前缀 /// </summary> /// <param name="opts"></param> /// <param name="routeAttribute"></param> public static void UseCentralRoutePrefix(this MvcOptions opts, IRouteTemplateProvider routeAttribute) { opts.Conventions.Insert(0, new RouteConvention(routeAttribute)); } }
这种在startup注册这个方法即可
services.AddMvc(opt => { opt.UseCentralRoutePrefix(new RouteAttribute("Api")); });
事实上,根据我们的规则我们可以添加很多扩展 ,在AddMvc被注册时,同时注册进去!
感谢各位阅读!