【问题标题】:ReactJS fetch post API 405 issueReactJS 获取发布 API 405 问题
【发布时间】:2018-01-02 00:37:31
【问题描述】:

我正在使用 swagger 发布 APi,它工作正常,但是当我从 react jsm 发布它时会导致 405 问题。 Fiddler 为 swagger 显示 RAW 信息如下:

POST http://localhost:7100/api/test/submit?guid=17327026-4348-4ce9-aceb-5774c3a724bf HTTP/1.1
Host: localhost:7100
Connection: keep-alive
Content-Length: 14
Origin: http://localhost:7100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36
Content-Type: application/json
Accept: */*
Referer: http://localhost:7100/swagger/ui/index
Accept-Encoding: gzip, deflate, br
Accept-Language: en,en-US;q=0.8,zh;q=0.6,zh-CN;q=0.4
Cookie: ASP.NET_SessionId=yzdydpdimqvgpvejykzjqqqb; .ASPXAUTH=dWLGc_XQvl3qTNrEJXsRyk3w-tXBSFeXKC0bIUDzLDLFJi5kbSAt_hcJXQs0-pfz7uVm-VJ27ZGAbN8eErCNV-Wozn3D1ZbHD7ONNN5VCMjT_Joyz_1aIcTZLR401s0TtC4Br1sRlerv0zX4F4xnDLhrIm5YKkGfZj2aZzDgc-KjNPVWY1SEC6k2XqPq54vo9_HUvudihHGlneNx1n2JlodvFxAeYudKnUSBRWpp2rRAx94uF7KmmP5BQoTmBTTq1qKSv98YiPToicePFR32d9yk1Uw1qcFrnkKD2zKOCuJByNgCLN_eC5dOmdLKfPCekciEJ16KfeYg8XeApIf13vCrtGOy-L2EXibWuEjUjKCrUy8sfYTGNZbxDffTg9gNOn7-nfyR5hKLYDM0CxfmENV7S0ExTSFyGhsR5aqqB3oXq3A_i8ENabgGMy_tFyor06S7_vrUUcDlS2hFgsxWzgMrRUdVIlohHK2-slPdbhwuUKIZXKKiSQijwH0RskwF-l8RyVe_0VCcCVipk4MXtncDvrubmEW09LWeOycyc0wc1BmMHL9AATpBHA6WBNLEaMGS9-x-RhFC5YNJW1KtetmlXiaKmiX9L-2wWhVRgjlhmfjtRPjxlVvW1GxyeKC-JOlSPnY6DInNM-qa2dcZjdaoffdnLBvzKTHkJNwzUSZw8fN-Vz6SVmURMtpEQAKmxloNvw

"test working"

对于来自反应的帖子如下:

OPTIONS http://localhost:7100/api/test/submit?guid=17327026-4348-4CE9-ACEB-5774C3A724BF HTTP/1.1
Host: localhost:7100
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: POST
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36
Access-Control-Request-Headers: content-type
Accept: */*
Referer: http://localhost:3000/?testId=17327026-4348-4ce9-aceb-5774c3a724bf
Accept-Encoding: gzip, deflate, br
Accept-Language: en,en-US;q=0.8,zh;q=0.6,zh-CN;q=0.4

我认为下面的 fetch post 功能有问题,有没有机会修复它,然后 RAW 信息可以与第一个相同。

onFormSubmit(Result) {
     fetch("http://localhost:7100/api/test/submit?guid=" +  "17327026-4348-4CE9-ACEB-5774C3A724BF",
      { 
        method: 'POST',
      // headers: {'Content-Type':'application/x-www-form-urlencoded'}, 
     headers: {'Content-Type':'application/json'}, 
   //     contentType: 'application/json; charset=utf-8',
      //  body: JSON.stringify(result) 
      body: "test working"
    })
      .then((response) => {
        console.log(response.ok ? 'success' : 'error');
      })
      .catch(function (error) {
        console.log('catch error');
      });
  }

【问题讨论】:

标签: json reactjs post asp.net-web-api swagger


【解决方案1】:

这是一个CORS 问题您需要在您的服务器中允许来自http://localhost:3000 的请求。

【讨论】:

  • Swager 等 REST 客户端不关心服务器是否允许与其通信,但 Chrome 等 Web 浏览器将验证服务器是否允许来源,这是通过发送 OPTIONS 来完成的在您的 POST 请求之前请求,服务器必须以状态 200 对其进行响应。
  • 对此不清楚,它在招摇中工作,所以在反应中获取它时一定有问题? @Akram
  • 你能说出javascript控制台中打印的内容吗?
  • OPTIONS localhost:7100/api/test/… 405(不允许的方法)localhost/:1 Fetch API 无法加载 localhost:7100/api/test/…。预检响应包含无效的 HTTP 状态代码 405
  • 所以我说的是真的,服务器正在通过代码 405 方法来响应您不允许的方法,当 Web 浏览器询问服务器是否可以向他发送 POST 请求(由 OPTIONS 请求完成)服务器回复 NO (405)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 2020-08-17
  • 1970-01-01
  • 2019-11-06
  • 2014-08-13
  • 2021-09-05
  • 1970-01-01
相关资源
最近更新 更多