AllowAnyOrigin Cors无法正常运行Axios Vuejs

chr*_*ark 3 cors vue.js asp.net-core axios vuejs2

我有一个已经设置好的服务器,可以在生产环境中运行,有很多应用程序调用此Web服务器。下面的代码演示了它允许任何原始请求。

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseExceptionHandler("/Home/Error");

        app.UseStaticFiles();

        app.UseCors(builder =>
        {
            builder.AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader();
        });
Run Code Online (Sandbox Code Playgroud)

这适用于当前设置的所有服务器。它在我们的内部网络上,其他内部服务器将使用此服务。

我正在创建一个概念证明,以尝试通过使用缓慢并使我们的应用程序现代化Vue。除非此axios请求出现错误。其他调用此方法的服务器也使用.net,但它应建立相同的请求。

这是错误。

无法加载https:// {server} / api / application / 36626:所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问源' http:// localhost:8080 '。

这显然是axios的疯狂话题。我允许任何来源。我无法想象我们只想使用“简单请求”,因此简单请求的w3标准可能无法正常工作。考虑到这是octet-stream服务器返回的消息,我认为这可能是不正确的错误。代码如下。

<script>
import axios from 'axios'

export default {
  name: 'AppList',
  data () {
    return {
      applist: [],
      errors: []
    }
  },
  created: function() {
    axios.get('https://{server}/api/application/36626')
      .then(r => { console.log(response); })
      .catch(ex => {
        this.errors.push(ex);
      })
  }
}
</script>
Run Code Online (Sandbox Code Playgroud)

编辑我对这台机器拥有全部权利,我已经确认我可以使用本地机器上的Postman GET请求,而不会出现任何问题。

编辑2工作curl命令curl -X GET --header 'Accept: application/octet-stream' 'https://{server}/api/Application/36626'

chr*_*ark 6

事实证明.Net Core Server的安装不正确,直到我尝试使用本地计算机上的浏览器时,CORS问题才出现。

我不确定CORS的实现方式是否发生了变化,并且我不知道,还是从一开始就没有正确执行,但是我确定我遵循了指南。

我更改的第一件事是确保在配置要使用的应用程序之前添加了Cors策略MVC

我做的第二件事,我怀疑这是可选的,但最佳实践是,我也将策略逻辑移到了ConfigureServices方法上。

我的最终代码如下。我会尽量保持秩序。

 public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                    builder => builder.AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials());
            });
            services.AddOptions();
            services.AddSwaggerGen();
            ///Authentication configuration went here.
            services.AddSingleton<IConfiguration>(Configuration);
            services.AddMvc();

        }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseExceptionHandler("/Home/Error");
        app.UseStaticFiles();
        app.UseCors("CorsPolicy");

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

        app.UseSwagger((httpRequest, swaggerDoc) =>
        {
            swaggerDoc.Host = httpRequest.Host.Value;

        });
        app.UseSwaggerUi(swaggerUrl: "/{appname}/swagger/v1/swagger.json");
Run Code Online (Sandbox Code Playgroud)