尝试解决 localhost 中放置请求的 CORS 错误

Trying to resolve CORS error on put request in localhost

提问人:Dimuthu Madushan 提问时间:11/17/2023 更新时间:11/17/2023 访问量:22

问:

使用PUT方法时,我收到此错误。

对印前检查请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

Ballerina 服务器没有将我的 put 请求识别为相应的资源。

这是我的芭蕾舞女演员服务代码:

import ballerina/http;

@http:ServiceConfig {
    cors: {
        allowOrigins: ["http://localhost:3000"],
        allowMethods:["GET","POST","PUT","DELETE","OPTIONS"]
    }
}

service /projects on new http:Listener(8080) {


    isolated resource function post .(@http:Payload Project project) returns int|error? {
        return addProject(project);
    }

    isolated resource function get [int id]() returns Project|error? {
        return getProject(id);
    }

    isolated resource function get .() returns Project[]|error? {
        return getAllProjects();
    }

    isolated resource function put .(@http:Payload Project project) returns int|error? {
        return updateProject(project);
    }

    isolated resource function delete [int id]() returns int|error? {
        return removeProject(id);
    }

}

在向此 PUT 资源发出请求时,我没有收到 Access-Control-Allow-Origin 标头:。这是我从此服务收到的实际响应:preflight/projects/1

HTTP/1.1 204 No Content
allow: GET, DELETE, OPTIONS
content-length: 0
server: ballerina
date: Tue, 21 Mar 2023 11:03:14 +0530, 0B
HTTP CORS 芭蕾舞演员

评论


答:

1赞 Dimuthu Madushan 11/17/2023 #1

这是意料之中的,因为服务中没有资源匹配。如果您指的是此 PUT 资源:projects/1

isolated resource function put .(@http:Payload Project project) returns int|error? {
     return updateProject(project);
}

那么这不是绑定到,这实际上是绑定到的(更多信息可以在这里找到)。由于请求的资源不存在,因此您没有获得标头。/projects/[id]/projectsAccess-Control-Allow-Origin

如果你像这样改变你的资源,那么它应该可以工作:

isolated resource function put [int id](@http:Payload Project project) returns int|error? {
     return updateProject(project);
}