ASP.NET Boilerplate CORS Проблема вне локального хоста - PullRequest
0 голосов
/ 03 декабря 2018

Я создал проект с использованием шаблонов запуска (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 при развертывании приложения в рабочем режиме.Есть ли рекомендуемый способ сделать это?

Заранее спасибо,

...