为什么从React到WebAPI运行此PATCH方法时会出现CORS错误?

动态

这是我的Cors初始化代码:

        app.UseCors(builder =>
            builder.AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin());

但是,当我运行PATCH时,在Chrome 83中出现以下错误:

通过CORS策略阻止从来源“ https://users-dev.myproject.com”访问“ https://api-dev.myproject.com/api/mp”的访问:否“ Access-Control-Allow” -Origin'标头出现在请求的资源上。如果不透明的响应满足您的需求,请将请求的模式设置为“ no-cors”,以在禁用CORS的情况下获取资源。

这是调用api(来自React)的代码:

  const response = await fetch(API_URL() + `/mp`, {
    method: 'PATCH',
    body: `"${JSON.stringify(mpForm.values)}"`,
    headers: {
      Authorization: 'Bearer ' + apiToken,
      'Content-type': 'application/json'
    }
  });

这里可能出什么问题了?对该域的大多数API请求就可以了。目前只是这个。

更新

以防万一,您遇到此确切的问题,此问题的根本原因是正文:

body: `"${JSON.stringify(mpForm.values)}"`,

并且通过重构API使其与这样的主体配合使用,解决了该问题:

body: JSON.stringify(mpForm.values),

这是一个问题,原因是stringify函数在返回值中嵌入了双引号,导致传递了这样的字符串:

'"{"foo":"bar"}"'

然后导致CORS错误。

克里斯·谢勒

如果某些请求有效,但其他请求无效,那么您的CORS配置看起来是正确的,则有可能问题根本不在API端。

  1. 在API startup.cs中,确保在配置所有其他配置之前先配置CORS。

    app.UseCors(builder => builder
       .AllowAnyOrigin()
       .AllowAnyMethod()
       .AllowAnyHeader()
    

    此代码有效,尽管不是很安全,但它将在全球范围内满足您应用的浏览器CORS协议

  2. 确保在整个API中没有冲突的CORS配置,在控制器或方法中查找失败请求的单个CORS配置。

  3. 检查客户端,尽管客户端代码看起来不错,但从变量中注入了主体,以解决任何客户端到服务器的问题,您需要以纯文本格式记录完整的请求,或者从您的网络流量检查工具中检索该请求Web浏览器在运行时。

    如果对您的API的大多数查询都能正确解决,并且只有一两个失败,那么这很好地表明了客户端存在问题,您应该从这里开始。


更新:

OP的问题根本不与CORS直接相关,但是它很好地提醒了两个重要的教训:

  1. 格式错误的请求在生成对OPTIONS请求的正确响应之前Web API可能会失败,并且如果该OPTIONS请求未按照规范进行响应,则浏览器将首先将此报告为CORS拒绝问题,以阻止来自API的真实错误响应

  2. 在向论坛发布问题以寻求有关解决错误的建议时,提供导致错误的代码仅能说明问题。您需要包括显示运行时值以及实际错误消息的日志。

  • 要调试客户端和服务器之间的任何Web API问题,您应始终查看受影响呼叫的实际HTTP请求和响应内容以及标头,可以使用浏览器开发工具查看网络跟踪,但是,如果需要定期调试问题像这样在生产中,您应该考虑在客户端或服务器端进行请求跟踪日志记录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在执行此查询时会出现此错误?

来自分类Dev

为什么运行此代码时会出现NullPointerException?

来自分类Dev

为什么运行应用程序时会出现此错误?

来自分类Dev

Shellshock:为什么在测试漏洞时会出现此错误

来自分类Dev

为什么从班级外部调用此方法时会出现转换错误?

来自分类Dev

为什么更改此代码时会出现“分段错误”错误?

来自分类Dev

SQL,为什么在创建报告表时会出现此错误?

来自分类Dev

为什么在创建 JComboBox 对象时会出现此编译错误?

来自分类Dev

为什么在调用此 Web 服务时会出现 404 错误?

来自分类Dev

为什么会出现此本地错误?

来自分类Dev

为什么会出现此身体错误?

来自分类Dev

为什么会出现此sqlite错误?

来自分类Dev

Python:为什么会出现此错误?

来自分类Dev

为什么Glimpse会出现此错误?

来自分类Dev

为什么会出现此输入错误?

来自分类Dev

为什么会出现此错误 (NoneType)?

来自分类Dev

为什么在Rust中处理自定义错误类型时会出现运行错误?

来自分类Dev

为什么在为 char 指针赋值时会出现运行时错误?

来自分类Dev

为什么在运行下面的代码时会出现stackoverflow错误?

来自分类Dev

为什么在运行 npx run dev 时会出现找不到模块错误?

来自分类Dev

为什么运行此env-cmd命令会出现此错误?

来自分类Dev

每当尝试运行此LinkedList删除功能时,为什么会出现分段错误错误?

来自分类Dev

为什么创建pthread时会出现分段错误?

来自分类Dev

为什么不使用strip()时会出现错误?(Python)

来自分类Dev

为什么有时会出现细分错误?

来自分类Dev

为什么在使用 KeyboardAvoidView 时会出现“Invariant Violation”错误?

来自分类Dev

为什么运行此示例node.js代码会出现“ TypeError:object is not a function”的错误?

来自分类Dev

为什么每次尝试在用户界面中运行代码时都会出现此错误?

来自分类Dev

如果在控制台中运行此语法,为什么会出现语法错误?{} === {}

Related 相关文章

  1. 1

    为什么在执行此查询时会出现此错误?

  2. 2

    为什么运行此代码时会出现NullPointerException?

  3. 3

    为什么运行应用程序时会出现此错误?

  4. 4

    Shellshock:为什么在测试漏洞时会出现此错误

  5. 5

    为什么从班级外部调用此方法时会出现转换错误?

  6. 6

    为什么更改此代码时会出现“分段错误”错误?

  7. 7

    SQL,为什么在创建报告表时会出现此错误?

  8. 8

    为什么在创建 JComboBox 对象时会出现此编译错误?

  9. 9

    为什么在调用此 Web 服务时会出现 404 错误?

  10. 10

    为什么会出现此本地错误?

  11. 11

    为什么会出现此身体错误?

  12. 12

    为什么会出现此sqlite错误?

  13. 13

    Python:为什么会出现此错误?

  14. 14

    为什么Glimpse会出现此错误?

  15. 15

    为什么会出现此输入错误?

  16. 16

    为什么会出现此错误 (NoneType)?

  17. 17

    为什么在Rust中处理自定义错误类型时会出现运行错误?

  18. 18

    为什么在为 char 指针赋值时会出现运行时错误?

  19. 19

    为什么在运行下面的代码时会出现stackoverflow错误?

  20. 20

    为什么在运行 npx run dev 时会出现找不到模块错误?

  21. 21

    为什么运行此env-cmd命令会出现此错误?

  22. 22

    每当尝试运行此LinkedList删除功能时,为什么会出现分段错误错误?

  23. 23

    为什么创建pthread时会出现分段错误?

  24. 24

    为什么不使用strip()时会出现错误?(Python)

  25. 25

    为什么有时会出现细分错误?

  26. 26

    为什么在使用 KeyboardAvoidView 时会出现“Invariant Violation”错误?

  27. 27

    为什么运行此示例node.js代码会出现“ TypeError:object is not a function”的错误?

  28. 28

    为什么每次尝试在用户界面中运行代码时都会出现此错误?

  29. 29

    如果在控制台中运行此语法,为什么会出现语法错误?{} === {}

热门标签

归档