我正在编写一个微服务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}路由相匹配?