在 Delphi 中使用MARS REST API库时,如何允许头字段(HeaderParam)?

xxhby3vn  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(106)

我用MARS-Curiosity Delphi REST Library做了一个基本的API和POST请求端点,这个端点在Postman中工作得很好,但是只要我尝试从其他地方(比如JavaScript)执行POST请求,我就会得到一个CORS策略错误。
这就是我得到的:
CORS策略阻止了从origin 'http://localhost'获取'http://127.0.0.1:8080/rest/person/profile/get'的访问:在预检响应中Access-Control-Allow-Headers不允许请求头字段API_key。
POST http://127.0.0.1:8080/rest/person/profile/get net::ERR_FAILED
x1c 0d1x的数据
我不知道如何在MARS中允许或使用头文件。我试着看演示,但没找到任何有用的东西。
这是我定义端点的 Delphi 代码:

[Path('profile')]
TPersonResource = class
protected
public
  [POST, Path('get'), Produces(TMediaType.APPLICATION_JSON)]
  function PersonProfileGet([HeaderParam] API_Key: String; [BodyParam] APerson: TPersonGet): TArray<TPersonGet>;
end;

字符串
您将看到,我将[HeaderParam] API_Key: String;作为PersonProfileGet函数中的一个参数。这也是在一些Demos中完成的。
这是我尝试执行请求的JavaScript代码:

const requestHeaders = {
    "Content-Type": 'application/json',
    "API_Key": "Test"
};

const requestOptions = {
  method: 'POST',
  headers: requestHeaders
};

fetch("http://127.0.0.1:8080/rest/person/profile/get", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));


有人知道如何允许MARS中的头字段或者为什么我得到这个错误吗?

9wbgstp7

9wbgstp71#

这其实很简单。
在可执行文件所在的文件夹中有一个.ini文件。它还应该与您的可执行文件具有相同的名称。
如果在其中添加以下行:

CORS.Headers=API_Key

字符串
这将允许API_Key用作头字段之一。
但在您的例子中,CORS.Headers已经在那里,并且已经设置了一些允许的头,看到Content-Type是允许的,并且没有给予CORS策略错误。所以你只需要找到CORS.Headers,然后在它的末尾加上API_Key,就像下面的例子:

CORS.Headers=Content-Type,API_Key

相关问题