微服务api网关中的路由属性问题

时间:2018-08-30 09:57:12

标签: c# rest microservices api-gateway

我正在编写一个微服务api网关,我希望将客户端请求路由到适当的微服务。当微服务出现时,他们将其服务引入api网关,然后将它们存储在Redis中。

{
  "Id": "api/values.put",
  "Microservice": "Sample",
  "Controller": "api/Values",
  "Action": "",
  "Method": "Put",
  "IpAddress": "http://localhost:4560"
}

例如,客户从网关呼叫/ service / Company,我找到了可以处理此请求并将其路由到的微服务。

但是我在某些情况下有问题。

我有一个像这样的控制器=>

[RoutePrefix("api/Company")]
public class CompanyController : ApiControllerRead
{
    public IEnumerable<Company> Get()
    {
        return new List<Company>();
    }

    public Company Get(int id)
    {
        return new Company();
    }

    [Route("{companyId}/Employees")]
    public IEnumerable<Employee> GetEmployees(int companyId)
    {
        // Filter Data
        return new List<Employee>();
    }

    [Route("{companyId}/Employees/{employeeId}")]
    public Employee GetEmployeeById(int companyId, int employeeId)
    {
        // Filter Data
        return new Employee();
    }
}

如果客户请求/ service / Company我可以从Redis轻松找到微服务并发送请求,则为默认设置。

但是当我们需要使用Route属性时,就会出现问题。

我们认为像这样将路由属性存储在数据库中。

{ "Id": "api/company.getemployeebyid", "Microservice": "Sample", "Controller": "api/Company", "Action": "", "Method": "GetEmployeeById", "IpAddress": "http://localhost:4560", "Route" : "{companyId}/Employees/{employeeId}" }

因此,如果客户致电 / service / Company / 1 / Employees / 1 我如何确定该网址与{companyId} / Employees / {employeeId}路由相匹配?

0 个答案:

没有答案