2016-10-13 10 views
12

Я искал PostAsJsonAsync метод расширения в ядре ASP.NET. Основываясь на статье here, ее можно найти в сборке Microsoft.AspNet.WebApi.Client. Тем не менее, хотя Microsoft изменила все имена сборки с Microsoft.AspNet на Microsoft.AspNetCore, что более специфично для .NET Framework. Но я не смог найти Microsoft.AspNetCore.WebApi.ClientГде метод PostAsJsonAsync в ASP.NET Core?

Где PostAsJsonAsync метод расширения в ядре ASP.NET?

+0

Это не является частью проекта ASP.NET ядра, следовательно, не после 'Microsoft.AspNetCore. *' Схема присвоения имен. Первоначально это расширение для приложений Windows 8/81./10/UWP/WinRT, которые основаны на 'System.Runtime' и .NET Core на основе этого тоже – Tseng

+0

, так что расширение не доступно в .Net Core из коробка? – LP13

+4

Если вы не добавите этот пакет в свой проект, нет его недоступности. Это расширение «HttpClient». Полностью не связан с ASP.NET или ASP.NET Core. Как видно, https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/ здесь нет зависимостей ни от ASP.NET MVC5, ни от ASP.NET Core MVC. Он должен работать с .NET Core, хотя это PCL, который нацелен на: NET 4.5 и Win8/8.1. Вам просто нужен «импорт»: ["portable-net45 + win8"] 'statement в project.json – Tseng

ответ

6

Это не часть проекта ASP.NET Core. Однако вы можете продолжить:

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http://myurl/api"); 

string json = JsonConvert.SerializeObject(myObj); 

request.Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); 

HttpClient http = new HttpClient(); 
HttpResponseMessage response = await http.SendAsync(request); 

if (response.IsSuccessStatusCode) 
    {     
    } 
else 
    { 
    } 
+0

Не забывайте удалять переменные запроса и http. – Rolf

9

Для этого я не заслуживаю никакого признания. Посмотрите @ danroth27 ответ в следующей ссылке.

https://github.com/aspnet/Docs/blob/master/aspnetcore/mvc/controllers/testing/sample/TestingControllersSample/tests/TestingControllersSample.Tests/IntegrationTests/HttpClientExtensions.cs

Он использует метод расширения. Код, как показано ниже. (Скопировано из приведенной выше ссылки github). Я использую его на .Net Core 2.0.

using System.Net.Http; 
using System.Net.Http.Headers; 
using System.Threading.Tasks; 
using Newtonsoft.Json; 

namespace TestingControllersSample.Tests.IntegrationTests 
{ 
    public static class HttpClientExtensions 
    { 
     public static Task<HttpResponseMessage> PostAsJsonAsync<T>(
      this HttpClient httpClient, string url, T data) 
     { 
      var dataAsString = JsonConvert.SerializeObject(data); 
      var content = new StringContent(dataAsString); 
      content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
      return httpClient.PostAsync(url, content); 
     } 

     public static async Task<T> ReadAsJsonAsync<T>(this HttpContent content) 
     { 
      var dataAsString = await content.ReadAsStringAsync(); 
      return JsonConvert.DeserializeObject<T>(dataAsString); 
     } 
    } 
} 
1

Это происходит поздно, но я думаю, что это может помочь кому-то по линии. Поэтому методы *AsJsonAsync() не являются частью проекта ASP.NET Core. Я создал пакет, который дает вам функциональность. Вы можете получить его на Nuget.

https://www.nuget.org/packages/AspNetCore.Http.Extensions

using AspNetCore.Http.Extensions; 
... 
HttpClient client = new HttpClient(); 
client.PostAsJsonAsync('url', payload); 

 Смежные вопросы

  • Нет связанных вопросов^_^