Я создал проект с использованием шаблонов запуска (https://aspnetboilerplate.com/Templates) с использованием ASP.NET Core 2.x, .NET Core (кросс-платформенный), SPA (Angular) и конфигурации нескольких решений. Я создал базу данных ивыполнил необходимые миграции. Теперь я могу использовать приложение через localhost: 4200. Но, когда я хотел подключиться с других устройств в сети компании, используя mylocalip: 4200, я получил ошибку CORS.
Я не сделализмените код шаблона, но мой метод ConfigureServices:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// MVC
services.AddMvc(
options => options.Filters.Add(new CorsAuthorizationFilterFactory(_defaultCorsPolicyName))
);
IdentityRegistrar.Register(services);
AuthConfigurer.Configure(services, _appConfiguration);
services.AddSignalR();
// Configure CORS for angular2 UI
services.AddCors(
options => options.AddPolicy(
_defaultCorsPolicyName,
builder => builder
.WithOrigins(
// App:CorsOrigins in appsettings.json can contain more than one address separated by comma.
_appConfiguration["App:CorsOrigins"]
.Split(",", StringSplitOptions.RemoveEmptyEntries)
.Select(o => o.RemovePostFix("/"))
.ToArray()
)
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
)
);
// Swagger - Enable this line and the related lines in Configure method to enable swagger UI
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new Info { Title = "Example API", Version = "v1" });
options.DocInclusionPredicate((docName, description) => true);
// Define the BearerAuth scheme that's in use
options.AddSecurityDefinition("bearerAuth", new ApiKeyScheme()
{
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
Name = "Authorization",
In = "header",
Type = "apiKey"
});
});
// Configure Abp and Dependency Injection
return services.AddAbp<ExampleWebHostModule>(
// Configure Log4Net logging
options => options.IocManager.IocContainer.AddFacility<LoggingFacility>(
f => f.UseAbpLog4Net().WithConfig("log4net.config")
)
);
}
Метод My Configure:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseAbp(options => { options.UseAbpRequestLocalization = false; }); // Initializes ABP framework.
app.UseCors(_defaultCorsPolicyName); // Enable CORS!
app.UseStaticFiles();
app.UseAuthentication();
app.UseAbpRequestLocalization();
app.UseSignalR(routes =>
{
routes.MapHub<AbpCommonHub>("/signalr");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "defaultWithArea",
template: "{area}/{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
// Enable middleware to serve generated Swagger as a JSON endpoint
app.UseSwagger();
// Enable middleware to serve swagger-ui assets (HTML, JS, CSS etc.)
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint(_appConfiguration["App:ServerRootAddress"].EnsureEndsWith('/') + "swagger/v1/swagger.json", "Example API V1");
options.IndexStream = () => Assembly.GetExecutingAssembly()
.GetManifestResourceStream("Example.Web.Host.wwwroot.swagger.ui.index.html");
}); // URL: /swagger
}
В соответствии с этими методами сервер должен взять 3 URL-адреса из файла appsettings.json и разрешитьCORS для них.
("CorsOrigins": "http://localhost:4200,http://localhost:8080,http://localhost:8081")
"http://localhost:4200" в appsettings.json - это URL-адрес моего клиентского приложения, принадлежащего Angular. Я попытался добавить mylocalip: 4200 в список CorsOrigins и попытался изменить с помощью Origins (...) метод в AddCors (...) с allowAnyOrigin () (он должен позволять любой машине подключаться к серверу), эти изменения тоже не сработали.
Eошибка, замеченная в браузере Chrome
Еще один связанный с этим вопрос: я искал документацию, но не смог ее найти: каковы лучшие практики ABP при развертывании приложения в рабочем режиме.Есть ли рекомендуемый способ сделать это?
Заранее спасибо,