访问 REST 服务时出现访问冲突

Access Violation when accessing REST service

我已经建立了一个第三方 Rest/Json 网络 API 的接口,对于有效的测试用例一切都很好,但是当我从 API 请求一些无效的东西时,说一个不存在的工作,API return 是一个响应,其中正文 = 'null' 并且内容类型为 "application/json; charset=utf-8"。我不确定这是否是 Web API 的标准做法,但是当我在 IHttpClient 上调用 Execute 时,我最终遇到访问冲突并且客户端退出。

Protrace 如下

    Exception code: C0000005 ACCESS_VIOLATION
    Fault address:  00007FFC6733DAAD 01:000000000077CAAD C:\Apps\Progress7\bin\prow.dll

        ** ABL Stack Trace **

   --> Write OpenEdge.Net.HTTP.Filter.Payload.JsonEntityWriter at line 463  (OpenEdge/Net/HTTP/Filter/Payload/JsonEntityWriter.r)
        ExtractEntity OpenEdge.Net.HTTP.Lib.ABLSockets.ABLSocketLibrary at line 360  (OpenEdge/Net/HTTP/Lib/ABLSockets/ABLSocketLibrary.r)
        Execute OpenEdge.Net.HTTP.Lib.ABLSockets.ABLSocketLibrary at line 312  (OpenEdge/Net/HTTP/Lib/ABLSockets/ABLSocketLibrary.r)
        Execute OpenEdge.Net.HTTP.HttpClient at line 154  (OpenEdge/Net/HTTP/HttpClient.r)
        TryRest Tempo.TempoApi at line 1264  (D:\_Dev\OnTap-Trunk\rcode\Tempo\TempoApi.r)
        ExecuteRest Tempo.TempoApi at line 234  (D:\_Dev\OnTap-Trunk\rcode\Tempo\TempoApi.r)

TryRest 是:

    METHOD PRIVATE INTEGER TryRest(
        INPUT  oUri AS URI,  
        INPUT  cType AS CHARACTER,
        INPUT  cContentType AS CHARACTER,
        INPUT  oContent AS Object,
        OUTPUT oResponse AS IHttpResponse ):

        DEFINE VARIABLE result AS INTEGER NO-UNDO.

        DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.

        CASE cType:

            WHEN "GET" THEN
                oRequest = RequestBuilder:GET(oURI)
                                         :AddHeader("Authorization", "Bearer " + STRING(cAccessToken))
                                         :AcceptJson()
                                         :REQUEST.
        END CASE.    

        oResponse = ResponseBuilder:Build():Response.
        oClient:EXECUTE(oRequest,oResponse).

        RETURN oResponse:StatusCode.

        CATCH e AS Progress.Lang.Error:
            UNDO, THROW e.
        END CATCH.

    END METHOD.

我使用的是最新的 OpenEdge 客户端,11.7.2 Windows x64。

我的问题是,对于无效请求,web API 到 return 'Null' 正常吗?

其次,这显然是 OpenEdge.Net.HTTP.Lib 中未处理的异常,不应导致客户端崩溃。有什么解决方法吗?我试过将 AcceptJson() 更改为 AcceptAll 和 AcceptHTML,但是过程是一样的,在 JsonEntityWriter 中崩溃。

谢谢

不,如果您向无效路由发出请求,通常 RESTful API 会 return 404。我能想到的唯一例外是,如果您尝试访问将参数作为 URI 的一部分的路由。