使用常规映射路由的属性路由是否有意义
Does Attribute Routing with Conventional mapped routes make sense
我们有很多 Web api 解决方案,其中有 2 个项目。一个项目设置网络 api 配置内容,另一个项目包含控制器。
每个网站 api 配置都是这样设置的:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
当我们在每个 controller/action 上使用 Route/Prefix-Attributes 时,我问自己 config.Routes.MapHttpRoute 方法调用是否仍然有效?
实际上,只要我在控制器上注释路由属性,至少我就会覆盖 web 的约定行为 api。因此该方法调用已过时。
对吗?或者还有什么要考虑的,因为我想在每个项目中去掉这个方法调用。
仍将应用基于约定的路由。您的基于属性的路由将优先(因为它们是首先配置的)但是如果一个操作方法同时具有匹配的属性路由 和 常规路由,both路线将映射到相关操作。
如果您想完全使用基于属性的路由,删除基于约定的路由映射可能是明智之举,以防止意外行为(即在非预期路由下暴露操作)。
当然,您首先要确保没有无意中依赖基于约定的路由!
我们有很多 Web api 解决方案,其中有 2 个项目。一个项目设置网络 api 配置内容,另一个项目包含控制器。
每个网站 api 配置都是这样设置的:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
当我们在每个 controller/action 上使用 Route/Prefix-Attributes 时,我问自己 config.Routes.MapHttpRoute 方法调用是否仍然有效?
实际上,只要我在控制器上注释路由属性,至少我就会覆盖 web 的约定行为 api。因此该方法调用已过时。
对吗?或者还有什么要考虑的,因为我想在每个项目中去掉这个方法调用。
仍将应用基于约定的路由。您的基于属性的路由将优先(因为它们是首先配置的)但是如果一个操作方法同时具有匹配的属性路由 和 常规路由,both路线将映射到相关操作。
如果您想完全使用基于属性的路由,删除基于约定的路由映射可能是明智之举,以防止意外行为(即在非预期路由下暴露操作)。
当然,您首先要确保没有无意中依赖基于约定的路由!