0

hat Wenn dies ein Duplikat einer vorhandenen Frage ist, lassen Sie mich bitte wissen, welcher Post eine ähnliche Situation hat.HttpPost-Anfrage funktioniert nicht, wenn JSON-String HTML in

Ich versuche eine POST-API aufzurufen, die von REST-Clients wie POSTMAN tatsächlich einwandfrei funktioniert.

Wenn ich versuche, diese API von C# mit HttpClient aufzurufen, funktioniert es nur, wenn ich keinen HTML-Inhalt im Anfragetext verwende.

Hier ist mein Code:

HttpClient client = new HttpClient(); 
string baseUrl = channel.DomainName; 
client.BaseAddress = new Uri(baseUrl); 

client.DefaultRequestHeaders 
     .TryAddWithoutValidation(
      "Content-Type", 
      "application/x-www-form-urlencoded;charset=utf-8"); 

const string serviceUrl = "/api/create"; 

var jsonString = CreateApiRequestBody(model, userId, false); 

var uri = new Uri(baseUrl + serviceUrl); 
try 
{ 
    HttpResponseMessage response = await client.PostAsync(uri.ToString(), new StringContent(jsonString, Encoding.UTF8, "application/json")); 
    if (response.IsSuccessStatusCode) 
    { 
     Stream receiveStream = response.Content.ReadAsStreamAsync().Result; 
     StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 
     var str = readStream.ReadToEnd(); 
    } 
    ... 
} 

Und mein jsonString wie folgt aussieht:

{ 
    \"user_id\":\"6\", 
    \"description\":\"<h2 style=\\\"font-style:italic;\\\"><u><font><font>Test Test Test&nbsp;</font></font></u></h2>\\n\\n<p style=\\\"font-style: italic;\\\">Hi it&#39;s a Test JOB</p>\\n\\n<p>&nbsp;</p>\" 
} 

Wenn ich Klartext in description-Tag verwenden, die API eine gültige Antwort zurückgibt, aber nicht mit der HTML-Inhalt darin.

Ich glaube, ich könnte einige zusätzliche Header oder etwas anderes fehlen.

Jede Hilfe wird sehr geschätzt.

+0

Haben Sie versucht, sowohl content-type als auch accept-type als application/json zu setzen? – uTeisT

+0

Inhaltstyp für Anwendung/josn verwenden Content-Type: application/json –

+0

Ich habe versucht mit, client.DefaultRequestHeaders.TryAddWithoutValidation ("Content-Type", "application/json"); und es hat nicht funktioniert für mich –

Antwort

1

Haben Sie versucht, WebUtility.HtmlEncode() Methode zu verwenden?

Wenn Sie den Inhalt StringContent festlegen, verwenden Sie WebUtility.HtmlEncode(jsonString), um API-freundlich zu machen.

So:

using System.Net; 

HttpResponseMessage response = 
    await client.PostAsync(
       uri.ToString(), 
       new StringContent(WebUtility.HtmlEncode(jsonString), 
           Encoding.UTF8, 
           "application/json")); 

Vergessen Sie nicht System.Net

zu verwenden, das Sie einen sicheren (vor allem für APIs) HTML-String in Ihrer Anfrage zu verwenden.

Hoffe, das hilft.

+0

Danke für Ihre Antwort, aber nicht in meinem Fall. –

+0

Sorry, das hat nicht geholfen. Der einzige andere Vorschlag, den ich habe, ist die 'StringContent()' Methode zu verwenden, die nur 'WebUtility.HtmlEncode (jsonString) ''; Ausschließen der Codierung und mediaType. Lassen Sie mich wissen, wenn Sie etwas Glück haben. –

+0

HI, danke für deine Antwort. Das eigentliche Problem war mit der API von Drittanbietern, die ich verwendete. Sie filterten den HTML-Inhalt im Grunde aus. Nach viel Diskussion und Kontaktaufnahme mit dem eigentlichen Entwickler habe ich das gefunden. –