net.core 和 angular4 应用程序的 Cors 问题 - 适用于 azurewebsites.net 域而不是自定义
Posted
技术标签:
【中文标题】net.core 和 angular4 应用程序的 Cors 问题 - 适用于 azurewebsites.net 域而不是自定义【英文标题】:Cors issue with net.core and angular4 app - works on azurewebsites.net domain not on custom 【发布时间】:2018-09-09 02:21:08 【问题描述】:我在 azurewebsites.net 域上托管开发环境。Webapp 位于 webapp.azurewebsites.net Api 在 api.azurewebsites.net 上
此方案运行正常,这意味着应用程序客户端和 api 服务器端已正确设置(cors)。
问题出现在我安装了自定义域和 https 证书的现场场景中: Webapp 位于 www.webapp.com Api 在 api.webapp.com 上
我检查了 3 次 build 是否正确替换了 cors origin 设置 (web.config) 的值,所有值都正确,但在实时自定义域上仍然出现错误。
错误:
无法加载https://api.webapp.com/api/connect/token:响应 预检请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://www.webapp.com” 访问。
当然,我通过邮递员访问 api 没有问题。
API 启动.cs:
public IServiceProvider ConfigureServices(IServiceCollection services)
services.AddApplicationInsightsTelemetry(Configuration);
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddCors(options =>
options.AddPolicy("CorsPolicy",
builder => builder.WithOrigins(Configuration.GetSection("HostSettings:WebAppClientUrl").Value.ToString())
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
);
ConfigureDependencyInjection(services);
// Register the Swagger generator, defining one or more Swagger documents
services.AddSwaggerGen(x =>
x.SwaggerDoc("v1", new Info Title = "API", Version = "v1" );
// UseFullTypeNameInSchemaIds replacement for .NET Core
x.CustomSchemaIds(y => y.FullName);
//Set the comments path for the swagger json and ui.
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, "Api.xml");
x.IncludeXmlComments(xmlPath);
);
// Add framework services.
services
.AddMvc()
.AddFluentValidation(x => x.RegisterValidatorsFromAssemblyContaining<CreateViewModelValidator>());
services.AddMvcCore()
.AddJsonFormatters(x => x.Converters.Add(new StringEnumConverter()));
// Add di framework
var container = new Container(new DependencyInjectionRegistry());
container.Populate(services);
services.AddAutoMapper(cfg => cfg.ConstructServicesUsing(container.GetInstance));
Mapper.AssertConfigurationIsValid();
return container.GetInstance<IServiceProvider>();
也在configure方法中:
app.UseCors("CorsPolicy");
应用程序设置.json:
"HostSettings":
"WebAppClientUrl": "https://www.webapp.com"
【问题讨论】:
您能否在 web.config 和您的代码中向我们展示任何与 CORS 相关的行。 您需要在配置/配置服务方法的启动类上配置它。不确定您对 web.config 的含义。在此处发布您的创业课程,以便我们查看。 我添加了startup.cs代码 【参考方案1】:我必须去 Azure 并在那里设置 CORS on web api。
【讨论】:
以上是关于net.core 和 angular4 应用程序的 Cors 问题 - 适用于 azurewebsites.net 域而不是自定义的主要内容,如果未能解决你的问题,请参考以下文章
使用angular4和asp.net core 2 web api做个练习项目
使用angular4和asp.net core 2 web api做个练习项目
将 .Net Core 2.0 和 Angular4 部署到 AWS 后无法发布到 Sqlite 数据库
使用 Asp.net Core 诊断 Angular4 服务器端渲染的问题