AllowAnyOrigin Cors 不工作 Axios Vuejs

Posted

技术标签:

【中文标题】AllowAnyOrigin Cors 不工作 Axios Vuejs【英文标题】:AllowAnyOrigin Cors Not working Axios Vuejs 【发布时间】:2018-04-27 21:27:25 【问题描述】:

我已经设置了一个服务器,在生产中运行,我们有大量的应用程序调用这个 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();
        );

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

我正在创建一个概念验证,以尝试使用 Vue 缓慢地更新我们的应用程序。除了这个axios 请求出现错误。调用此方法的其他服务器也在使用 .net,但它应该构建相同的请求。

这是错误。

未能加载 https://server/api/application/36626:请求的资源上不存在“Access-Control-Allow-Origin”标头。 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>

编辑我拥有这台机器的全部权利,我已确认我可以毫无问题地使用来自本地机器的 Postman GET 请求。

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

【问题讨论】:

用test-cors.org试试你的服务器 @akatakritos 它在我们的内部网络上,在我们的网络之外不可用。 它从你的浏览器发出请求,所以你应该仍然可以点击它 @akatakritos 我现在看到了,我正在研究它。 成功看起来像这样:test-cors.org/… 【参考方案1】:

事实证明 .Net Core 服务器设置不正确,直到我尝试在本地计算机上使用浏览器才出现 CORS 问题。

我不确定 CORS 实施是否发生了变化并且我不知道,或者我从一开始就没有正确执行,但我确信我遵循了指南。

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

我做的第二件事,我怀疑这是可选的,但最佳实践是,我还将策略逻辑移至 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");

【讨论】:

不能同时设置 AnyOrigin() 和 AnyCredentials()。【参考方案2】:

对于 PUT 和 DELETE 方法,激活 cors 对我不起作用,我所做的是在 web.config 文件中添加一些配置行以删除 WebDav 模块。

我在 web.config 文件的现有标签 system.webServer 标签中使用了这个

<modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
</modules>

我在这个网站上找到了以下几行:

修改 web.config https://hovercraft.ie/asp-net-core-web-api-put-delete-methods-not-allowed-405-error/

希望这会有所帮助。

【讨论】:

请在您的答案上发布工作代码,而不是仅仅指出外部链接。

以上是关于AllowAnyOrigin Cors 不工作 Axios Vuejs的主要内容,如果未能解决你的问题,请参考以下文章

azure 应用服务和 asp.net 核心:CORS 策略甚至 AllowAnyOrigin 也阻止了来源

.net core 5 signalr cors被通配符阻止[重复]

CORS 不起作用 MVC6 - RC1

C# Net Core:在 API 中启用 Cors 后,仍处于 CORS 策略阻止状态

跨域,批量注册服务

IOS CORS问题离子1项目和android工作完美