Silver Lightning Ответов: 1

Потребление api в ASP.NET MVC 5


Привет всем,
Добрый день!

У меня возникла проблема с PutAsJsonAsync и PostAsJsonAsync при использовании REST api: "http://afs-test-redis99.afservice.org:8080/site/"


Операции: положить

Имя: addItem
Путь: / api / cart / {id} / item
Запрос: тип магазина
Параметры: товар, количество, ключ
Тело запроса: AnyObject(необязательно)

Пример: в моем почтальоне он работает правильно, когда я пытаюсь поставить/добавить новый элемент:

"http://afs-test-redis99.afservice.org:8080/site/api/cart/51/item?item=COM1&store=PCM&type=active&quantity=5"

Но когда я попытался реализовать это в своем классе репозитория mvc

public async Task<Uri> SaveItemAsync(Item item)
       {
           client.BaseAddress = new Uri("http://afs-test-redis99.afservice.org:8080/site/");
           client.DefaultRequestHeaders.Accept.Clear();
           client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(        "application/json"));

           HttpResponseMessage response = await client.PutAsJsonAsync($"api/cart/{item.ID}/item?",$"item={item.ProductID}&store=PCM&type=active&{item.Quantity}");
           response.EnsureSuccessStatusCode();

           // return URI of the created resource.
           return response.Headers.Location;
       }


Погрешность результата:
{StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Connection: close
  Date: Tue, 13 Jun 2017 00:23:21 GMT
  Server: Apache-Coyote/1.1
  Content-Length: 1062
  Content-Language: en
  Content-Type: text/html; charset=utf-8
}}


Кто-нибудь может помочь мне, что не так в моем коде, извините, что я новичок в использовании веб-api в моем клиентском приложении. Заранее большое вам спасибо.

Что я уже пробовал:

Он правильно работает в почтальоне:
"http://afs-test-redis99.afservice.org:8080/site/api/cart/51/item?item=COM1&store=PCM&type=active&quantity=5"

But when I tried to implement this in my mvc repository class (c#)

public async Task<Uri> SaveItemAsync(Item item)
        {
            client.BaseAddress = new Uri("http://afs-test-redis99.afservice.org:8080/site/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(		"application/json"));
			
            HttpResponseMessage response = await client.PutAsJsonAsync($"api/cart/{item.ID}/item?",$"item={item.ProductID}&store=PCM&type=active&{item.Quantity}");
            response.EnsureSuccessStatusCode();

            // return URI of the created resource.
            return response.Headers.Location;
        }

Silver Lightning

кто-нибудь знает, как использовать этот api с несколькими параметрами? Заранее спасибо

1 Ответов

Рейтинг:
5

Silver Lightning

Проблема решается с помощью этого кода:

public async Task<Uri> SaveItemAsync(Item item)
        {
            RunAsync();
            var path = $"api/cart/{item.ID}/item";
            var paramValues = $"?item={item.ProductID}&store=MAC&type=active&quantity={item.Quantity}";
            var query = path + paramValues;
            
            HttpResponseMessage response = await client.PutAsJsonAsync(query, new StringContent(item.ProductID, UnicodeEncoding.UTF8, "application/json"));

            if (response.IsSuccessStatusCode)
            {
                response.EnsureSuccessStatusCode();
            }
            else
            {
                response.ReasonPhrase.ToString();
            }

            // return URI of the created resource.
            return response.Headers.Location;
            
        }