簡體   English   中英

訪問REST服務時發生訪問沖突

[英]Access Violation when accessing REST service

我已經建立了一個第三方Rest / Json Web API的接口,在有效的測試用例下,一切都可以正常工作,但是當我從API請求一些無效的東西時,例如說一個不存在的作業,API返回一個響應,其中body ='null',內容類型為“ application / json; charset = utf-8”。 我不確定這是否是Web API的標准做法,但是當我在IHttpClient上調用Execute時,我最終遇到訪問沖突,並且客戶端退出。

Protrace是一個關注者

    Exception code: C0000005 ACCESS_VIOLATION
    Fault address:  00007FFC6733DAAD 01:000000000077CAAD C:\Apps\Progress\117\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返回“ Null”是否正常?

其次,這顯然是OpenEdge.Net.HTTP.Lib中未處理的異常,這不應導致客戶端崩潰。解決此問題的任何想法? 我試過將AcceptJson()更改為AcceptAll和AcceptHTML,但是protrace相同,在JsonEntityWriter中崩潰。

謝謝

不會,如果您對無效的路由提出請求,通常RESTful API將返回404。 我能想到的唯一例外是,如果您嘗試訪問包含參數作為URI一部分的路由。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM