Developer forum

Forum » Development » DW10 ODataprovider

DW10 ODataprovider

Anders Ebdrup
Reply

Dear Dynamicweb,

 

I have experienced an issue with a rather old OData endpoint, where the ODataProvider fails in this method:

    private string GetMetadataURL()
    {
        if (GetEndpointResponse(ODataSourceReader.GetEndpointUrlWithTop(_endpoint.Url), out string endpointResponse, out Exception exception) != HttpStatusCode.OK || exception is not null)
            return GetMetadataURLFallBack();

        using var responseJson = JsonDocument.Parse(endpointResponse);
        if (responseJson.RootElement.ValueKind != JsonValueKind.Object)
            return GetMetadataURLFallBack();

        return responseJson.RootElement.EnumerateObject().FirstOrDefault(obj => obj.Name.Equals("@odata.context", StringComparison.OrdinalIgnoreCase)).Value.GetString() ?? GetMetadataURLFallBack();
    }

Because of a missing null check in the last part where FirstOrDefault is used. In order to get the fallback work, I have changed the last part in the method to:

    private string GetMetadataURL()
    {
        if (GetEndpointResponse(ODataSourceReader.GetEndpointUrlWithTop(_endpoint.Url), out string endpointResponse, out Exception exception) != HttpStatusCode.OK || exception is not null)
            return GetMetadataURLFallBack();

        using var responseJson = JsonDocument.Parse(endpointResponse);
        if (responseJson.RootElement.ValueKind != JsonValueKind.Object)
            return GetMetadataURLFallBack();

        var parseResponse = responseJson.RootElement.EnumerateObject().FirstOrDefault(obj => obj.Name.Equals("@odata.context", StringComparison.OrdinalIgnoreCase));

        var property = responseJson.RootElement.EnumerateObject()
            .FirstOrDefault(obj => obj.Name.Equals("@odata.context", StringComparison.OrdinalIgnoreCase));

        var result = property.Value.ValueKind == JsonValueKind.Undefined ? GetMetadataURLFallBack() : property.Value.GetString();

        return result;
    }

So I hope that this check can be implemented in the standard code?

 

Best regards, Anders

 

 


Replies

 
Rasmus Sanggaard Dynamicweb Employee
Rasmus Sanggaard
Reply
This post has been marked as an answer

Hi Anders,

 

It can :-). Thank you. #23115

 

BR Rasmus Sanggaard

Votes for this answer: 1

 

You must be logged in to post in the forum