我无法使用 json 使用 react 向我的 web api 发出 Post 请求

IT技术 ajax reactjs cors fetch asp.net-core-webapi
2021-05-03 16:56:18

我在 ASP.NET Core 中创建了一个 webapi,我需要使用 React 来使用它,web api 正常工作,如果我使用 curl 或 postman 等,它可以正常工作。当我打算使用 React 时,问题就开始了,当我尝试使用来自问题的 js 对我的 API 发出任何请求时。

更复杂的是,当我向其他 API 发出请求时,它可以正常工作,这让我相信问题出在我的 API 中,但正如我所说,它只能与其他人一起工作,但react却并非如此。我已经尝试了很多方法。

API 正在本地网络上的 IIS 上运行

尝试的方法

使用 Ajax

$ .ajax ({
    method: "POST",
    url: 'http://192.168.0.19:5200/api/token',
    beforeSend: function (xhr) {
      xhr.setRequestHeader ("Content-type", "application / json");
    },
    date: {
      name: 'name',
      password: 'password'
    },
    success: function (message) {
        console.log (message);
    },
    error: function (error) {
        / * if (error.responseJSON.modelState)
            showValidationMessages (error.responseJSON.modelState); * /
            console.log (error);
    }
  });

使用获取

const headers = new Headers ();
    headers.append ('Content-Type', 'application / json');

    const options = {
      method: 'POST',
      headers,
      body: JSON.stringify (login),
      mode: 'cors' // I tried with cors and no-cors
    }

    const request = new Request ('http://192.168.0.19:5200/api/token', options);
    const response = await fetch (request);
    const status = await response.status;
    console.log (response); * /
    // POST adds a random id to the object sent
    fetch ('http://192.168.0.19:5200/api/token', {
    method: 'POST',
    body: JSON.stringify ({
      name: 'name',
      password: 'password'
     }),
    headers: {
      "Content-type": "application / json; charset = UTF-8"
    },
    credentials: 'same-origin'
    })
  .then (response => response.json ())
  .then (json => console.log (json))

使用请求

var request = new XMLHttpRequest ();
    request.open ('POST', 'http://192.168.0.19:5200/api/token', true);
    request.setRequestHeader ('Content-Type', 'application / json; charset = UTF-8');
    request.send (login);

错误

安慰 在此处输入图片说明

网络选项卡 在此处输入图片说明

当我在没有将内容类型更改为 JSON 的情况下执行此操作时,它会起作用,因为 API 返回说它不是有效类型。

3个回答

除了在您的 .NET 配置中允许 CORS 之外。您还需要为所有 OPTION 请求返回 200 OK。

不确定它是如何在 .NET 中完成的,只是创建一个检测请求方法的中间件,如果它是 OPTIONS,则以 200 状态完成请求。

好吧,我遇到了同样的问题,似乎您需要将操作添加控制器中HttpPost属性中。

这是一个例子。

    [HttpPost("[action]")]
    public void SubmitTransaction([FromBody] SubmitTransactionIn request)
    {
        Ok();
    }

像这样尝试

 public void ConfigureServices(IServiceCollection services)
 { 
     services.AddCors();
 }

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
        app.UseCors(option => option.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().AllowCredentials());

        app.UseAuthentication();
        app.UseMvc();
 }