我用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中的头字段或者为什么我得到这个错误吗?
1条答案
按热度按时间9wbgstp71#
这其实很简单。
在可执行文件所在的文件夹中有一个
.ini
文件。它还应该与您的可执行文件具有相同的名称。如果在其中添加以下行:
字符串
这将允许
API_Key
用作头字段之一。但在您的例子中,
CORS.Headers
已经在那里,并且已经设置了一些允许的头,看到Content-Type
是允许的,并且没有给予CORS策略错误。所以你只需要找到CORS.Headers
,然后在它的末尾加上API_Key
,就像下面的例子:型