作为Api网关的Asp.net Web Api
问题描述:
在我的组织中,我有几个asp.net web api项目。
我愿意开发一个网页API,它将像网关一样行事,并拥有单一的入口点。作为Api网关的Asp.net Web Api
我试过处理程序和过滤器,但路由不允许我那样做。
让我解释一下,我真正想要做的
让HumanResourceProject在:api.domain.com/api/hr
样本控制器API /小时/ LeaveRecord/GetByEmployee/
设CRMProject在:api.domain.com/api/crm
样本控制器API/CRM /客户/ GetByRegion/
让网关在:api.domain.com/api/gateway
我希望我的网关来处理像
1. api.domain.com/api/gateway/ API/CRM /客户/ GetByRegion/
或
api.domain.com/api/gateway/请求API /小时/ LeaveRecord/GetByEmployee/
答
OK,
-
首先,您需要注册您的Web API的路线。请确保您在WebApiConfig.cs映射你的路线格式文件如下:
// Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
创建网页API控制器,并设置路由前缀
[RoutePrefix("api/crm")] [System.Web.Http.Cors.EnableCorsAttribute("*","*","*")] [Authorize] public class CRMController: ApiController {
- 为您的请求创建控制器方法
- 我建议你用的工具,如提琴手或Chrome扩展程序,如休息控制台,让您的GET/POST请求等来测试你的端点
[HttpGet] [Route("GetByRegion/{regionId}")] public IHttpActionResult GetSomeDataByRegion(int regionId) {
编辑:如果您有一个未知的复杂对象,可能会导致请求发生问题,那么使用模型类包装参数总是很好的做法。嗅探流量会帮助您更轻松地找到问题。
您似乎想要使用API网关,但是再次,您似乎都希望将其用于将请求路由到相关方。如果是这种情况,那么看看IIS的URL重写。如果它位于云中,请查看Azure服务总线中继。 – Don
另外我想在Gateway中实现一些安全控制。 – zapoo