You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apex 22.1.0配置OData REST数据源时遇404错误求助

ASP.NET Core OData 8 API无法被Oracle APEX 22.1 OData Connector发现(404错误)

问题场景

  • 已按《Getting Started with ASP.NET Core OData 8》创建OData API,浏览器直接访问以下端点均返回正常响应:
    • 请求:http://localhost:5164/odata/pls/v1/Customers

      响应:{"@odata.context":"http://localhost:5164/odata/pls/v1/$metadata#Customers","value":[{"Id":1,"Name":"Customer 1"},{"Id":2,"Name":"Customer 2"},{"Id":3,"Name":"Customer 3"}]}

    • 请求:http://localhost:5164/odata/pls/v1/Customers(1)

      响应:{"@odata.context":"http://localhost:5164/odata/pls/v1/$metadata#Customers/$entity","Id":1,"Name":"Customer 1"}

  • 按Oracle OData Connector指南配置插件后,在APEX 22.1.0中创建REST Data Source时,点击Discover按钮触发404错误
  • 环境说明:本地APEX 22.1.0,已将http://localhost:5164添加至数据库ACL,且APEX可正常访问http://localhost:5164/Login接口,OData API无需认证
  • 补充:多次验证OData端点响应正常,但问题未解决

排查与解决建议

1. 验证APEX服务器能否访问OData元数据端点

APEX的OData Connector依赖$metadata端点获取数据源结构,需确认APEX所在数据库服务器可访问该端点。执行以下PL/SQL代码测试:

DECLARE
  l_request UTL_HTTP.req;
  l_response UTL_HTTP.resp;
  l_text VARCHAR2(32767);
BEGIN
  l_request := UTL_HTTP.begin_request('http://localhost:5164/odata/pls/v1/$metadata');
  l_response := UTL_HTTP.get_response(l_request);
  UTL_HTTP.read_text(l_response, l_text);
  DBMS_OUTPUT.put_line(l_text);
  UTL_HTTP.end_response(l_response);
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('Error: ' || SQLERRM);
    IF UTL_HTTP.is_response_open(l_response) THEN
      UTL_HTTP.end_response(l_response);
    END IF;
END;
/

若返回错误,说明APEX服务器无法正确获取元数据,需排查网络连通性或API的元数据配置。

2. 确认OData API的元数据与路由配置

检查ASP.NET Core OData的启动配置,确保$metadata端点正确暴露:

  • 验证Program.cs/Startup.cs中的路由配置,确保路径匹配:
app.UseEndpoints(endpoints =>
{
    endpoints.MapODataRoute("odata", "odata/pls/v1", GetEdmModel());
    endpoints.MapControllers();
});
  • 确认GetEdmModel()方法正确构建了包含Customers实体集的EDM模型,示例:
private static IEdmModel GetEdmModel()
{
    ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
    builder.EntitySet<Customer>("Customers");
    return builder.GetEdmModel();
}

3. 修正APEX REST Data Source配置细节

  • 创建REST Data Source时,选择OData类型,服务URL需填写为http://localhost:5164/odata/pls/v1/(注意末尾的斜杠)
  • 认证方式选择No Authentication,匹配API的无认证要求
  • 若自动发现失败,尝试手动指定元数据URL为http://localhost:5164/odata/pls/v1/$metadata,再点击Discover

4. 检查数据库ACL的完整配置

确认ACL规则覆盖了API的所有子路径,执行以下SQL查看当前ACL配置:

SELECT host, lower_port, upper_port, acl FROM dba_network_acls;

若仅添加了http://localhost:5164,需确保规则允许访问该域名下的所有子路径,可通过重新添加ACL并指定端口范围(如80-65535)来覆盖。

5. 配置API的CORS策略

尽管APEX是服务器端访问,但API的CORS限制可能影响请求。在ASP.NET Core中添加宽松的CORS策略(仅用于测试,生产环境需调整):

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowAll",
        policy => policy.AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader());
});

// 确保CORS中间件在OData路由之前注册
app.UseCors("AllowAll");
app.UseEndpoints(endpoints =>
{
    endpoints.MapODataRoute("odata", "odata/pls/v1", GetEdmModel());
    endpoints.MapControllers();
});

内容的提问来源于stack exchange,提问作者bjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:13:26