Nuxt Axios 访问 XMLHttpRequest 错误 - 不从源调用 .NET webAPi

Posted

技术标签:

【中文标题】Nuxt Axios 访问 XMLHttpRequest 错误 - 不从源调用 .NET webAPi【英文标题】:Nuxt Axios Access to XMLHttpRequest error - not call .NET webAPi from origin 【发布时间】:2021-10-23 04:39:45 【问题描述】:

我正在尝试通过 nuxt axios 向 Localhost API 发出一个简单的请求,但是,无论我在 nuxt 配置文件中尝试做什么,它总是会出现此错误:

访问 XMLHttpRequest 在 'https://localhost:44309/api/api/usuarios/login' 来自原点 “http://localhost:3000”已被 CORS 策略阻止:响应 预检请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。

我提出这样的要求:

const data= await this.$axios.$post(
        'https://localhost:44309/api/usuarios/login',
        loginObject
      )

这是我的 nuxt.config.js:

publicRuntimeConfig: 
    axios: 
      baseURL: 'https://localhost:44309/api'
    
  ,

  // Axios module configuration: https://go.nuxtjs.dev/config-axios
  axios: 
    proxy: true,
    baseUrl: 'https://localhost:44309/api',
    proxyHeaders: false,
    credentials: false
  ,

  proxy: 
    '/api/':  target: 'https://localhost:44309/api', pathRewrite:  '^/api/': '' , changeOrigin: true 
  

如您所见,我已经尝试了 n 件事,但没有任何效果,我不再明白了。在我的 .NET webApi 服务器上,我已经在配置中添加了 services.Cors(),没有任何效果。

【问题讨论】:

【参考方案1】:

这是一个 CORS 问题,因此应该在后端而不是前端解决。

您的 Nuxt 应用程序是在此处执行 POST 请求的客户端。这种事情可能会通过代理(相当丑陋的解决方案)被黑客入侵,但如果您可以访问后端,请在此处添加 CORS 标头(主要将您的开发和生产 IP 列入白名单),您应该会很好。

有关这实际上是什么(本质上是安全性)的更多详细信息,Google 将提供很多关于此的内容。

【讨论】:

但是当我尝试通过 Postman 或类似的方式提出请求时,一切正常。 我已经将 Cors 添加到我的 .net web api 服务中 是的,Postman 工作是完全正常的。仍然是 CORS 问题。您可能以某种方式错误地配置了它。也许用您的 .net 配置创建一个新问题。至少,这不是来自 Nuxt 端代码的错误。 @lukecross【参考方案2】:

如果有人和我有同样的经历,请知道发生的事情很可能是 Cors,就像上面提到的朋友一样。

您必须在您的 Configuration 方法(在 Startup.cs 中)中创建一个 Cors,并在 Configure 方法中使用您的 Cors。此外,UseCors 需要位于 app.UseRouting 和 app.UseEndpoints 的中间(这基本上是我的问题)。

以下是基本 Cors 的实现方法:

public void ConfigureServices(IServiceCollection services)

   services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
            
                builder.AllowAnyOrigin();
                builder.AllowAnyMethod();
                builder.AllowAnyHeader();
            ));


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

   app.UseRouting();
   app.UseCors("MyPolicy");
   app.UseEndpoints(endpoints);

【讨论】:

以上是关于Nuxt Axios 访问 XMLHttpRequest 错误 - 不从源调用 .NET webAPi的主要内容,如果未能解决你的问题,请参考以下文章

Nuxt/TypeScript:无法访问 - TS2339:类型上不存在属性“XXX”

使用 Nuxt auth 和 axios 时 Javascript 堆内存不足

如何使用 Nuxt 访问 asyncData 中的数据

Nuxt + Axios 作为插件请求失败 404

nuxt.js 封装axios

nuxt axios代理