【问题标题】:Ionic 2 unable to post to asp dotnet core even with CORS enabled即使启用了 CORS,Ionic 2 也无法发布到 asp dotnet 核心
【发布时间】: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 中开发一个网页,并且我认为我将面临同样的问题。

标签: angular ionic2 .net-core


【解决方案1】:

感谢misha130 的上述评论。这解决了我的问题。

我只需要更新我的 ionic 代理文件并添加:

    {
        "path": "/users",
        "proxyUrl": "http://localhost:8080/users"
    }

再次感谢。

【讨论】:

    猜你喜欢
    • 2015-02-25
    • 2019-09-25
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 2021-10-28
    • 2016-12-02
    • 2015-05-05
    • 2019-08-01
    相关资源
    最近更新 更多