HttpClient.SendAsync - 找不到与此错误代码关联的文本。 '':发现无效字符

问题描述 投票:0回答:1

HttpClient.SendAsync 或 PostAsync 抛出以下错误。

System.Net.Http.HttpRequestException:发送请求时发生错误。 ---> System.Exception:找不到与此错误代码关联的文本。

'':发现无效字符。
在 System.Net.Http.HttpHandlerToFilter.SendAsync(HttpRequestMessage 请求,CancellationToken 取消)
在System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage请求,CancellationToken取消令牌)
在System.Net.Http.HttpClientHandler.SendAsync(HttpRequestMessage请求,CancellationToken取消令牌)
--- 内部异常堆栈跟踪结束 ---
在System.Net.Http.HttpClientHandler.SendAsync(HttpRequestMessage请求,CancellationToken取消令牌)
在 System.Net.Http.HttpClient.FinishSendAsyncBuffered(任务`1 sendTask,HttpRequestMessage 请求,CancellationTokenSource cts,布尔 disposeCts)
在 TestApp.MainPage.PostRequest(String url, StringContent stringContent)

这是 C# 代码:

    var address = new AddressModel()
            {
                CommunicationId = "[email protected]",
                ......
            };
var stringContent = new StringContent(JsonConvert.SerializeObject(address), Encoding.UTF8, "application/json");
HttpClient client = new HttpClient();
client.DefaultRequestHeaders
                          .Accept
                          .Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header
                    client.DefaultRequestHeaders.Add("Cookie", AuthCookie);
                    client.DefaultRequestHeaders.Add("X-Requested-With", "X");
                    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url)
                    {
                        Content = stringContent//CONTENT-TYPE header
                    };

                        try
                        {
                            //Failing on this Line. 
                            responseMessage = await client.SendAsync(request);
                            if (responseMessage.IsSuccessStatusCode)
                            {
                                var responseContent = await responseMessage.Content.ReadAsStringAsync();
                            }
                        }
                        catch (Exception ex)
                        {
                            //
                        }
                    

事实上,如果我们在 fiddler 中观察到,Post 调用是成功的,并且响应代码是 201 创建的。但是 post 调用返回的 Json 响应导致了错误,因此 PostAsync 无法准备 HttpResponseMessage 对象。

我没有看到下面粘贴的响应 JSON 存在任何问题,这可能会导致 - 发现无效字符。

提供原始请求和响应。

POST http://host/sap/opu/odata/sap/EMPLOYEE_ADDRESS_SRV/ADDRESS_ODATA HTTP/1.1
Cookie: MYSAPSSO2=---------;
X-Requested-With: X
Accept: application/json
Content-Length: 619
Content-Type: application/json; charset=utf-8
Host: host:8080
Connection: Keep-Alive
Pragma: no-cache

    {"start_date":"20090704","emailid":"[email protected]","pernr":"123456","subty":"2","begda":"\/Date(1246838400000)\/","endda":"\/Date(1561950000000)\/","stext":"Home","name2":"Xyz","stras":"Address line one","locat":"Address line two","anssa":"1","grpvl":"1","land1":"IN","hsnmr":"2-3","landx50":"India","state":"10","bezei":"Karnataka","ort02":"fsd","ort01":"Bengaluru","entkm":"0","pstlz":"560097","telnr":"1234567890","persg":null,"persk":null,"bukrs":"safs","ename":"afjdsklfsl","persa":null,"molga":null,"country":null,"name1":"asfsd","comp_code":"ABC","emp_curr":"INR","message":"Sample"}

回应:

HTTP/1.1 201 Created
set-cookie: sap-usercontext=sap-client=300; path=/
set-cookie: SAP_SESSIONID_DHR_100=asjkfhskdhfks%3d; path=/
content-type: application/json; charset=utf-8
content-length: 1117
location: http://host:8080/sap/opu/odata/sap/EMPLOYEE_ADDRESS_SRV/ADDRESS_ODATA(emailid='[email protected]',pernr='123456',subty='2',seqnr='000',start_date='20090704')
dataserviceversion: 2.0
message type: S
custom message: Home has been created successfully
sap-processing-info: ODataBEP=,crp=,st=,MedCacheHub=SHM,codeployed=X,softstate=
sap-perf-fesrec: 232519.000000

    {"d":{"__metadata":{"id":"http://host:8080/sap/opu/odata/sap/EMPLOYEE_ADDRESS_SRV/ADDRESS_ODATA(emailid='[email protected]',pernr='123456',subty='2',seqnr='000',start_date='20090704')","uri":"http://host:8080/sap/opu/odata/sap/EMPLOYEE_ADDRESS_SRV/ADDRESS_ODATA(emailid='[email protected]',pernr='123456',subty='2',seqnr='000',start_date='20090704')","type":"EMPLOYEE_ADDRESS_SRV.ADDRESS_ODATAType"},"emailid":"[email protected]","pernr":"123456","subty":"2","seqnr":"000","start_date":"20090704","begda":"\/Date(1246838400000)\/","endda":"\/Date(1561939200000)\/","stext":"Home","stras":"Address line one","locat":"Address line two","anssa":"1","grpvl":"1","name2":"Xyz","hsnmr":"2-3","ort01":"Bengaluru","ort02":"fsd","pstlz":"560097","land1":"IN","landx50":"India","telnr":"1234567890","entkm":"0","state":"10","bezei":"Karnataka","persg":"","persk":"","bukrs":"safs","ename":"afjdsklfsl","persa":"","molga":"","country":"","name1":"asfsd","comp_code":"WST","emp_curr":"INR","message":"Sample"}}
c# odata dotnet-httpclient
1个回答
1
投票

感谢大家的回复和提供建议。

问题出在响应标头属性上

message type: S
custom message: Home has been created successfully

钥匙中有空间。将它们更改为 message-typecustom-message 并使用 hiphen 而不是空格后 - 它工作得很好。

© www.soinside.com 2019 - 2024. All rights reserved.