我正在尝试对内部 docker 容器进行 api 调用,但对于每个请求 url,我都必须在 Nginx 配置中创建 proxy_pass。我读过一些文章,最后的斜杠应该可以将某些 url 之后的所有内容传递到 proxy_pass。
www.example.com/api -> 重定向到正确的端点
www.example.com/api/2020 -> 这不会重定向到 http://api/2020
location = /api/ {
proxy_pass http://api/;
}
Run Code Online (Sandbox Code Playgroud)
那么为什么这个配置不将 2020“参数”传递到 api 端点呢?当我进行如下配置时它会起作用:
location = /api/2020 {
proxy_pass http://api/2020;
}
Run Code Online (Sandbox Code Playgroud)
但问题是它是一个参数,所以它可能是任何数字,如何解决这个问题?
我读过其他帖子,但我再次问这个问题,以便更广泛地了解参数传递的可能性。真的有必要为此使用正则表达式吗?
我创建了一个应用程序程序集,并引用了 REST-Api 和 Blazor 应用程序。REST-Api 工作正常,但 Blazor 应用程序出现以下错误:
InvalidOperationException:无法从根提供程序解析“MediatR.IRequestHandler`2[Application.Customers.Queries.GetCustomersList.GetCustomersListQuery,Application.Common.Viewmodels.CustomerListVm]”,因为它需要范围服务“Application.Common.Interfaces.IWegisterDbContext”。Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution(类型 serviceType、IServiceScope 范围、IServiceScope rootScope)
InvalidOperationException:为 MediatR.IRequestHandler`2[Application.Customers.Queries.GetCustomersList.GetCustomersListQuery,Application.Common.Viewmodels.CustomerListVm] 类型的请求构造处理程序时出错。向容器注册您的处理程序。有关示例,请参阅 GitHub 中的示例。MediatR.Internal.RequestHandlerBase.GetHandler(ServiceFactory工厂)
在下面的代码示例中,我放置了我的 Starup 文件,两个项目都位于同一解决方案中,引用相同的项目。我已经尝试添加授权,但这显然不起作用。我不知道问题是什么,是我遗漏了什么还是这就是 Blazor?两个程序集中的 MediatR 版本相同。
这是我从 REST-Api 启动的:
using Application;
using Application.Common.Interfaces;
using Infrastructure;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Persistence;
using WebApi.Services;
namespace Wegister.WebApi
{
public class Startup
{
public IWebHostEnvironment Environment { get; }
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration, IWebHostEnvironment environment)
{
Configuration = configuration;
Environment = environment;
} …
Run Code Online (Sandbox Code Playgroud)