问题描述
我正在使用带有 net.core 3.1 的 Visual Studio 2019 和微服务员工执行一个项目
我的configuration.json 是:
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/employees/{everything}","DownstreamScheme": "http","DownstreamHostAndPorts": [
{
"Host": "provadb","Port": 80
}
],"UpstreamPathTemplate": "/api/employees/{everything}","UpstreamHttpMethod": [ "POST","PUT","GET" ]
}
在控制器中:
public class EmployeesController : ControllerBase
{
private readonly ProvaDBContext _context;
public EmployeesController(ProvaDBContext context)
{
_context = context;
}
// GET: api/Employees
[HttpGet]
public async Task<ActionResult<IEnumerable<Employees>>> GetEmployees()
{
return await _context.Employees.ToListAsync();
}
docker-compose.override.yml
version: '3.4'
services:
shapesapigateway:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=http://+:80
ports:
- "7000:80"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
provadb:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=http://+:80
ports:
- "7004:80"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
networks:
app-net:
driver: bridge
但如果在浏览器中写入:
localhost:7004/api/Employees
结果是:
[
{
"id": 1,"firstName": "Pranaya","lastName": "Rout","gender": "Male","salary": 60000
},{
"id": 2,"firstName": "Anurag","lastName": "Mohanty","salary": 45000
},{
"id": 3,"firstName": "Preety","lastName": "Tiwari","gender": "Female",{
"id": 4,"firstName": "Sambit","salary": 70000
},{
"id": 5,"firstName": "Shushanta","lastName": "Jena",{
"id": 6,"firstName": "Priyanka","lastName": "Dewangan","salary": 30000
},{
"id": 7,"firstName": "Sandeep","lastName": "Kiran",{
"id": 8,"firstName": "Shudhansshu","lastName": "Nayak",{
"id": 9,"firstName": "Hina","lastName": "Sharma","salary": 35000
},{
"id": 10,"firstName": "Preetiranjan","lastName": "Sahoo","salary": 80000
},{
"id": 12,"firstName": "PIO","lastName": "NONO","gender": "M","salary": 1234
}
]
但是如果我在浏览器中写:
localhost:7000/api/Employees
*'/usr/share/dotnet/shared/Microsoft.NETCore.App/3.1.10/System.Runtime.Intrinsics.dll' è stato caricato. Caricamento dei simboli ignorato. Il modulo è ottimizzato e l'opzione del debugger 'Solo codice utente' è abilitata.
Microsoft.AspNetCore.Hosting.Diagnostics: @R_23_4045@ion: Request starting HTTP/1.1 GET http://localhost:7000/api/Employees
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/1.1 GET http://localhost:7000/api/Employees
dbug: Ocelot.Errors.Middleware.ExceptionHandlerMiddleware[0]
requestId: 0HM5DM6ULMR8I:00000002,prevIoUsRequestId: no prevIoUs request id,message: ocelot pipeline started
Ocelot.Errors.Middleware.ExceptionHandlerMiddleware: Debug: requestId: 0HM5DM6ULMR8I:00000002,message: ocelot pipeline started
dbug: Ocelot.DownstreamRouteFinder.Middleware.DownstreamRouteFinderMiddleware[0]
requestId: 0HM5DM6ULMR8I:00000002,message: Upstream url path is /api/Employees
Ocelot.DownstreamRouteFinder.Middleware.DownstreamRouteFinderMiddleware: Debug: requestId: 0HM5DM6ULMR8I:00000002,message: Upstream url path is /api/Employees
warn: Ocelot.DownstreamRouteFinder.Middleware.DownstreamRouteFinderMiddleware[0]
requestId: 0HM5DM6ULMR8I:00000002,message: DownstreamRouteFinderMiddleware setting pipeline errors. IDownstreamRouteFinder returned Error Code: UnabletoFindDownstreamRouteError Message: Failed to match Route configuration for upstream path: /api/Employees,verb: GET.
Ocelot.DownstreamRouteFinder.Middleware.DownstreamRouteFinderMiddleware: Warning: requestId: 0HM5DM6ULMR8I:00000002,verb: GET.
warn: Ocelot.Responder.Middleware.ResponderMiddleware[0]
Ocelot.Responder.Middleware.ResponderMiddleware: Warning: requestId: 0HM5DM6ULMR8I:00000002,message: Error Code: UnabletoFindDownstreamRouteError Message: Failed to match Route configuration for upstream path: /api/Employees,verb: GET. errors found in ResponderMiddleware. Setting error response for request path:/api/Employees,request method: GET
requestId: 0HM5DM6ULMR8I:00000002,request method: GET
dbug: Ocelot.Errors.Middleware.ExceptionHandlerMiddleware[0]
requestId: 0HM5DM6ULMR8I:00000002,message: ocelot pipeline finished
Ocelot.Errors.Middleware.ExceptionHandlerMiddleware: Debug: requestId: 0HM5DM6ULMR8I:00000002,message: ocelot pipeline finished
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 23.4902ms 404*
我不明白我错在哪里!
解决方法
从 16.0.0 版本开始,您需要在 configuration.json 文件中使用“Routes”而不是“ReRoutes”。