2015-12-29 3 views
1

У меня есть службы WCF самопринятый который предоставляет метод Web POST со следующей подписью:HttpClient POST к WCF возвращает 400 Bad Request

[ServiceContract] 
public interface IPublisherService 
{ 
    [OperationContract] 
    [WebInvoke(UriTemplate = "Send", Method = "POST")] 
    void SendMessage(string message); 
} 

Если я отправить запрос с помощью Fiddler со следующей структурой (http://localhost:8080/Publisher/Send):

enter image description here

WCF возвращает 200 OK с ответом правильно десериализованное в формате JSON:

enter image description here

Но когда я пытаюсь использовать HttpClient из консольного приложения C#, я всегда получить обратно 400 Bad Request без какой-либо причины. Это запрос:

using (HttpClient client = new HttpClient()) 
{ 
    var content = new StringContent(this.view.Message); 
    content.Headers.ContentType = new MediaTypeHeaderValue("Application/Json"); 
    var response = client.PostAsync(
     new Uri("http://localhost:8080/Publisher/Send"), 
     content); 
    var result = response.Result; 
    this.view.Message = result.ToString(); 
} 

И ответ всегда 400, не имеет значения, если я использую client.PostAsync или clint.SendAsync.

StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
    Date: Tue, 29 Dec 2015 12:41:55 GMT 
    Server: Microsoft-HTTPAPI/2.0 
    Content-Length: 1647 
    Content-Type: text/html 
} 
+0

Вы пробовали добавление 'Accept: приложение/json' заголовок? –

+1

change 'Application/Json' to' application/json' –

+0

Да, и это не имеет значения, проблема в самой строке, мне пришлось использовать JsonFormatter, чтобы получить WCF, принимающий мой запрос. Я создал ответ, я не знаю, может ли быть полезным другим – Raffaeu

ответ

1

Я не знаю, если это имеет смысл, но ответ мое содержание строка не отформатирован. Я изменил запрос, используя Newtonsoft.Json и теперь он работает:

using (HttpClient client = new HttpClient()) 
{     
    var request = new StringContent(
     JsonConvert.SerializeObject(this.view.Message), 
     Encoding.UTF8, 
     "application/json"); 
    var response = client.PostAsync(
     new Uri("http://localhost:8080/Publisher/Send"), 
     request); 
    var result = response.Result; 
    view.Message = result.ToString(); 
} 
Смежные вопросы