【发布时间】:2017-07-16 04:46:58
【问题描述】:
我试图寻找答案,有些很接近但不是我想要的。
这是我的问题,我正在开发一个 Ionic 应用程序,目前正在开发网络浏览器视图。我无法将任何内容发布回我的 asp dotnet 核心后端。
我的堆栈如下: 前端
- Ionic 2 - 使用最新版本 Angular 4 的最新版本
- Nginx - 作为我的代理服务器
- Docker - 作为运行 dotnet 核心应用程序的容器
这是我正在尝试的帖子的代码:
let body =JSON.stringify({ 'username': username, 'password': password });
let options = new RequestOptions({headers:new Headers()});
options.headers.set('Content-Type', 'application/json; charset=UTF-8');
options.headers.set( 'Accept', 'application/json' );
return this.http.post(this.loginUrl,body,options)
.map((res: Response) => res.json())
.catch((error: any) => {
console.log("ERROR", error);
return Observable.throw(error.json().error || 'Server error')
})
我的代理有
add_header 'Access-Control-Allow-Origin' *;
而我的后台在 Startup.cs 中有以下 CORS 配置
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
在配置函数中
app.UseMvc().UseCors("CorsPolicy");
我在 Visual Studio 2017 的输出窗口中看到响应正在到达容器:
Application Insights Telemetry (unconfigured): {"name":"Microsoft.ApplicationInsights.Dev.Request","time":"2017-07-15T19:29:10.5330300Z","tags":{"ai.internal.nodeName":"9a9595bd67c1","ai.operation.id":"0HL6BMO90PHKC","ai.application.ver":"1.0.0.0","ai.operation.name":"OPTIONS Users/AuthenticateUser","ai.internal.sdkVersion":"aspnet5c:2.0.0","ai.cloud.roleInstance":"9a9595bd67c1","ai.location.ip":"172.18.0.5"},"data":{"baseType":"RequestData","baseData":{"ver":2,"id":"HKmnWfByHeU=","name":"OPTIONS Users/AuthenticateUser","duration":"00:00:11.2837000","success":false,"responseCode":"415","url":"http://leo.users/users/authenticate","properties":{"DeveloperMode":"true","httpMethod":"OPTIONS","AspNetCoreEnvironment":"Development"}}}}
我尝试了多种方法来设置 Ionic 2 端的标题。 我不知道该怎么做/如果我只是错过了一些东西。非常感谢您的帮助。
谢谢
【问题讨论】:
-
首先,您不需要 cors,因为您有本地服务 (github.com/ionic-team/ionic-proxy-example/blob/master/…) 的代理,而移动设备根本不需要 cors,因为它不使用此类策略。如果您真的想找出您的 CORS 无法正常工作的原因,您可以查看您的请求/响应标头以查看是否所有标头都存在
-
感谢您的回复。我必须有CORS。我正在设计一个微服务架构。目前,这意味着我的代理在一个 docker 容器中运行,另外两个微服务在单独的容器中运行。因此,我从代理访问我的服务的方式就是
http://service.name。我意识到在移动设备上运行我不会遇到这些问题。但现在我正在我的网络浏览器中开发,需要找到一种方法来解决这个问题。因为我也将在 Angular 2 中开发一个网页,并且我认为我将面临同样的问题。