【问题标题】:Server uses Cors but UI still gets allow-origin error服务器使用 Cors,但 UI 仍然出现 allow-origin 错误
【发布时间】:2019-04-16 00:38:59
【问题描述】:

您好,我正在尝试从我的 Angular 2 前端向 .NET Core Console App 发出 http get 请求,我收到以下错误:

Access to XMLHttpRequest at 'http://127.0.0.1:9300/api/getusers' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

对我来说这很好奇,因为我在服务器端启用了CORS,您可以在下面的Startup 类中看到。

启动

public class Startup {

        public Startup(IConfiguration configuration) {
            Configuration = configuration;
        }
        public void ConfigureServices(IServiceCollection services) {
            services.AddOptions();
            services.AddMvc();
        }
        public IConfiguration Configuration;
        public void Configure(IApplicationBuilder app) {
            Console.WriteLine("request delievered");
            Debug.WriteLine("Entered Server !");
            app.UseMvc();
            app.UseCors(x => { x.AllowAnyHeader(); x.AllowAnyOrigin();x.AllowAnyMethod(); });
        }
    }

我从UI 发出这样的请求:

@Injectable()
export class UserService{

    private static baseUrl:string="http://127.0.0.1:9300/api";

    constructor(private http:HttpClient) {
    }

    getClientsAsync():Promise<User[]>{
      let route=UserService.baseUrl+"/getusers";
      var data=(this.http.get(route)  //should i have some headers here?
      .map(resp=>resp)
      .catch(err=>
          Observable.throwError(err)

        ) as Observable<User[]>).toPromise<User[]>();

      return data;
    }
}

PS 我已经尝试使用Postman 并且请求有效,但是在angular 2 中我没有为我的http.get 方法包含任何headers。这可能是问题所在?

【问题讨论】:

    标签: asp.net-core cors


    【解决方案1】:

    您需要将UseCors 放在UseMvc 之前。

        public void Configure(IApplicationBuilder app) {
            Console.WriteLine("request delievered");
            Debug.WriteLine("Entered Server !");
            app.UseCors(x => { x.AllowAnyHeader(); x.AllowAnyOrigin();x.AllowAnyMethod(); });
            app.UseMvc();
        }
    

    这是因为 UseCors 添加了一个中间件(UseMvc 也是如此),中间件是按照从上到下的顺序执行的。所以请求永远不会到达 CORS 中间件。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 2021-09-21
      • 2013-05-22
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 2019-11-29
      相关资源
      最近更新 更多