Вызов методов MVC4 WebAPI из C# Metro UI Client с использованием PostAsync, HttpClient и Json

Я создал метод, использующий новые функции WebAPI в MVC4, и он работает в Azure.Этот метод требует публикации простого объекта LoginModel, состоящего из свойств Username и Password. Да, я планирую еще больше защитить это, как только я преодолею этот лежачий полицейский :-) Затем метод отвечает объектом в формате Json:

enter image description here

Я могу успешно вызвать этот метод с помощью Fiddler, при условии, что я включу «Content-Type: application/json" в заголовках запроса. Он возвращает значение 200, и я могу зайти в Fiddler Inspector и просмотреть объект ответа Json:

enter image description here

Однако у меня возникают проблемы с вызовом этого же метода из приложения MetroUI в Windows8 с использованием C#/XAML. Я начал играть с HttpClient и новыми концепциями Async в C#, и независимо от того, как я отформатировал свои вызовы Post (даже когда явно указывал, что хочу, чтобы Content-Type был «application/json»), Fiddler возвращает ошибку 500. и заявляет, что попытка использовала Content-Type:"text/html". Я считаю, что это является корнем проблемы:

enter image description here

Я перепробовал все мыслимое, чтобы опубликовать этот метод и вернуть объект Json, вот моя последняя попытка:

HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        HttpContent content = new StringContent(@"{ ""Username"": """ + Username.Text + @", ""Password"": """ + Password.Text + @"""}");

        client.PostAsync("http://myapi.com/authentication", content).ContinueWith(result =>
        {
            var response = result.Result;

            response.EnsureSuccessStatusCode();
        });

Это приводит к ошибке 500 с Content-Type установлен на "text/html"

Вот еще одна попытка, которая также не удалась:

HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.PostAsync("http://myapi.com/authentication", new StringContent(@"{ ""Username"": """ + Username.Text + @", ""Password"": """ + Password.Text + @"""}", Encoding.UTF8, "application/json"));
string statusCode = response.StatusCode.ToString();

Может ли кто-нибудь указать мне правильное направление?

Только что попробовал следующий код благодаря совету Nemesv:

HttpClient httpClient = new HttpClient();
        HttpContent content = new StringContent(@"{ ""Username"": """ + Username.Text + @", ""Password"": """ + Password.Text + @"""}");
        content.Headers.ContentType = new MediaTypeHeaderValue("application/json");


        HttpResponseMessage response = await httpClient.PostAsync("http://webapi.com/authentication", content);

        string statusCode = response.StatusCode.ToString();
        response.EnsureSuccessStatusCode();

Теперь он показывает «application/json» в заголовке моего запроса, но по-прежнему показывает «text/html» в веб-сеансе:

enter image description here

12
задан INNVTV 26 March 2012 в 00:26
поделиться