2015-10-19 2 views
0

У меня есть следующий код в контроллере MVC, что положить Guid строку образца в HttpResponseMessage:C# Чтение HTTP POST результат

public class CertifyController : Controller 
{ 
    [HttpPost] 
    public async Task<HttpResponseMessage> NewCertifyOfferRequestAsync(string requestString) 
    { 
     string activityId = "30dd879c-ee2f-11db-8314-0800200c9a66"; 

     HttpResponseMessage httpResponseMessage = new HttpResponseMessage(); 
     httpResponseMessage.Content = new StringContent(activityId); 
     return httpResponseMessage; 
    } 

} 

Я звоню этот контроллер через консольное приложение, используя следующий код:

using (HttpClient client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("http://localhost:84928/"); 

    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

    string requestString = "df5f5587-f1ef-449a-9d20-7f386ea638a8"; 

    HttpResponseMessage response = await client.PostAsJsonAsync("Certify/NewCertifyOfferRequestAsync", requestString); 
    if (response.IsSuccessStatusCode) 
    { 
     string activityId = await response.Content.ReadAsStringAsync(); 
     Console.WriteLine("Received activity id: " + activityId); 
    } 
} 

Я ожидаю получить активность в ответ «30dd879c-ee2f-11db-8314-0800200c9a66». Но вместо этого activityId получает «StatusCode: 200, ReasonPhrase:« OK », Версия: 1.1, Содержимое: System.Net.Http.StringContent, Заголовки: \ r \ n {\ r \ n Content-Type: text/plain; charset = utf-8 \ r \ n} "из вызова ReadAsStringAsync.

Как изменить назначение activityId так, чтобы оно получило активность, которая была сгенерирована в контроллере?

+0

Вы уверены, что что ActivityID не получает ваш результат вместе со всеми другими вещами? Опубликуйте весь результат здесь. – gustavodidomenico

+0

Это ваш код _actual_ WebAPI? Похоже, вы возвращаете «HttpResponseMessge», который сериализуется в строку целиком. – CodeCaster

+0

@gustavodidomenico Я отправил весь ответ activity.d.Content.ReadAsStringAsync(). – Romonov

ответ

3

Если это webapi, вы должны иметь возможность изменить свою подпись метода, чтобы вернуть «строку» вместо HttpResponseMessage.

например

public string Get(int id) 
{ 
    return "value"; 
} 

для детального образца, вы можете использовать Visual Studio для создания WebAPI веб-приложение и посмотреть на «ValuesController.cs»

+0

Вместо создания HttpResponseMessage я изменил возвращаемый тип функции post на Task и сразу вернул guid (return actvityId). Я мог бы получить activityId в приложении вызывающей консоли. Не могли бы вы также сказать, как я должен изменить свой код получения, чтобы получить activityId, если я сохраняю создание HttpResponseMessage как есть? – Romonov

+0

Я не пробовал, но думаю, если вы сильно напечатаете его и вернетесь с типом контента, установленным в «application/json». затем на стороне клиента десериализуйте содержимое в объект. вы должны получить то, что хотите. –