微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OData Get调用上发生错误,以从NAV获取实体集合

如何解决OData Get调用上发生错误,以从NAV获取实体集合

错误:编写JSON响应时,必须指定用户模型,并且必须将实体集和实体类型传递给ODataMessageWriter.CreateODataResourceWriter方法,或者必须在ODataResource上设置ODataResourceSerializationInfo或正在写入的ODataResourceSet

当从PowerQuery调用返回实体集合的绑定函数时,会发生这种情况。从网络浏览器调用时,响应为(JSON格式):

{
  "@odata.context": "https://tag- 
  master.adnm.net:9648/Tag2017Controlled/ODataV4/$Metadata#Collection(NAV.MeterReadingQuery)","value": [
  {
    "No": "PO100001","Description": "",},}

我用于GET调用函数(在request.FindEntriesAsync()时发生错误):

public async Task<IEnumerable<T>> GetAllAsync<T>()
        {
            IBoundClient<IDictionary<string,object>> oDataRequest = 
            _oDataService.Client(_logger).For("Company")
                .Key(companyName).Navigateto(_serviceName);
            IEnumerable<IDictionary<string,object>> response = await oDataRequest.FindEntriesAsync();
            IEnumerable<T> parsedResponse = _oDataResponseParser.Parse<T>(response);
            return parsedResponse;
        }

OdataService返回的OData客户端:

public IODataClient Client(ILogger logger = null)
        {
            if (logger == null)
            {
                logger = _logger;
            }

            NetworkCredential oDataCredentials = new NetworkCredential
            {
                UserName = _basicCredentials.Username,Password = _basicCredentials.Password
            };
            return 
                new ODataClient(
                    new ODataClientSettings(
                        new HttpClient(
                            new RetryHandler(
                                new httpclienthandler() {
                                        Credentials = oDataCredentials,PreAuthenticate = true
                                    },_logger
                                )
                            )
                            {
                                BaseAddress = _uri
                            },null,null
                        )
                        {
                            OnTrace = (x,y) => _logger.Loginformation(string.Format(x,y)),PreferredUpdateMethod = ODataUpdateMethod.Patch,PayloadFormat = ODataPayloadFormat.Json,IgnoreUnmappedProperties = true,IncludeAnnotationsInResults = true
                            
                        }
                    );
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。