এইচটিপিপি্লিয়েন্ট পোস্টএএসজসনসাইক ব্যবহার করে এএসপি.নেট কোরে HTTP পোস্ট পোস্ট করুন


143

আমি ডায়নামিক অবজেক্টের মতো পাঠাতে চাই

new { x = 1, y = 2 };

এইচটিটিপি পোস্ট মেসেজের মূল অংশ হিসাবে। তাই আমি লেখার চেষ্টা করি

var client = new HttpClient();

তবে আমি পদ্ধতি খুঁজে পাচ্ছি না

client.PostAsJsonAsync()

তাই আমি মাইক্রোসফ্ট.অ্যাসনেটকোর.হট্ট্প.এক্সটেনশন প্যাকেজটি প্রজেক্ট.জসনের সাথে যুক্ত করার চেষ্টা করেছি

using Microsoft.AspNetCore.Http.Extensions; 

ধারা ব্যবহার করতে। তবে এটি আমাকে সাহায্য করেনি।

সুতরাং এএসপি.নেট কোরে জেএসওএন বডি সহ পোষ্ট অনুরোধ প্রেরণের সহজতম উপায় কী?


উত্তর:


206

আপনার "Microsoft.AspNet.WebApi.Client" প্যাকেজের ( নমুনাগুলির জন্য এই নিবন্ধটি পড়ুন ) উল্লেখ করা উচিত ।

কোনও অতিরিক্ত এক্সটেনশন ছাড়াই আপনি স্ট্যান্ডার্ড PostAsyncপদ্ধতি ব্যবহার করতে পারেন :

client.PostAsync(uri, new StringContent(jsonInString, Encoding.UTF8, "application/json"));

jsonInStringকল করে আপনি যেখানে মান পেতে পারেনJsonConvert.SerializeObject(<your object>);


1
তবে মাইক্রোসফ্ট.এস্পনেট.ওয়েবপিপি.ক্লিয়েন্ট এএসপি.নেট কোর আরসি 2 লাইব্রেরির মতো দেখাচ্ছে না। এবং সেকোন উপায়টি কোড পুনরাবৃত্তির চেয়ে অনেক বেশি ((
— রিম

@ রেম আপনি কেন দ্বিতীয় উপায়ে ব্যবহারের জন্য কোনও HttpClient এক্সটেনশন পদ্ধতি ( PostAsJsonAsync) তৈরি করেন না । এটি আপনাকে কোড পুনরাবৃত্তি এড়াতে সক্ষম করে।
— আদম ক্যাগলিন

1
অবশ্যই। তবে আমি প্রশ্নটি জিজ্ঞাসা করেছিলাম কি আমি কিছু মিস করছি। আমি বিশ্বাস করতে পারি না এটি এখনও কোরে প্রয়োগ করা হয়নি!
— রেম

1
এই লাইব্রেরিটি মূল / নেট-স্ট্যান্ডার্ড নয়, আমার মনে হয় না System.Net.Http. ফর্ম্যাটটি এখনও পোর্ট করা হয়েছে
— ক্রিস এস

1
এটি নুগেট প্যাকেজ মাইক্রোসফট। তবে আপনি কীভাবে এটি করেন তবে শিরোনাম যেমন একটি অনুমোদনের কী যুক্ত করুন key
— নিক গ্যালিমোর

98

আমি এই ক্লাসটি ব্যবহার করি:

public class JsonContent : StringContent
{
    public JsonContent(object obj) :
        base(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json")
    { }
}

ব্যবহারের নমুনা:

new HttpClient().PostAsync("http://...", new JsonContent(new { x = 1, y = 2 }));

5
কেন একটি এক্সটেনশন পদ্ধতি? পাবলিক স্ট্যাটিক ক্লাস জসনসন্ট {পাবলিক টাস্ক <?> পোস্টএএসজেএসসোনএসিঙ্ক (এই এইচটিপিপি্লায়েন্ট ক্লায়েন্ট, শেরাইজএএসজেএসকে আপত্তি জানায়) {...}}
— তমুসজেরোয়

2
আমি জসনসন্টেন্ট শ্রেণি পদ্ধতির পছন্দ করি
— মার্কো আলভেস

এটি কি Content-Length:এইচটিটিপি শিরোনাম সেট করে ?
— ব্য্যাচেস্লাভ নেপাদোভস্কি

1
@ ভাইচেস্লাভ নেপাদোভস্কি এটি HttpClientসেটিংসের উপর নির্ভর করে , যেমন যদি একটি সেট client.DefaultRequestHeaders.TransferEncodingChunked = true Content-Lengthশিরোনাম সেট না করা হয় এবং Transfer-Encoding: chunkedতার পরিবর্তে সেট করা যায়। তবে, যদি কেউ ক্লায়েন্টের মতো তৈরি করে var client = new HttpClient();, শিরোনামটি Content-Lengthডিফল্টরূপে এই বিষয়বস্তু শ্রেণির জন্য সেট করা হবে।
— স্টপ-ক্রান

12

আমি গৃহীত উত্তর যোগ হবে আপনার কাছে যোগ করার জন্য চাইবেন Acceptকরার হেডার httpClient:

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

হ্যাঁ, আমার কাছে এটিও প্রয়োজনীয়, পোস্টম্যান ব্যবহার করে নিশ্চিত হওয়া দরকার।
— ওয়েইহুই গুও

1

আপনি ঠিক বলেছেন যে এটি দীর্ঘকাল থেকে .NET কোর এ প্রয়োগ করা হয়েছে।

লেখার সময় (সেপ্টেম্বর 2019), project.jsonনুগেট ৩.x + এর ফাইলটি PackageReference(যেমন https://docs.microsoft.com/en-us/nuget/archive/project-json এ ব্যাখ্যা করা হয়েছে ) ছাড়িয়ে গেছে ।

শ্রেণীর *Asyncপদ্ধতিতে অ্যাক্সেস পেতে HttpClientআপনার .csprojফাইলটি অবশ্যই সঠিকভাবে কনফিগার করা উচিত।

আপনার .csprojফাইলটি একটি সরল পাঠ্য সম্পাদকে খুলুন এবং নিশ্চিত করুন যে প্রথম লাইনটি
<Project Sdk="Microsoft.NET.Sdk.Web">
(যেমন https://docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj# তে দেখানো হয়েছে) -csproj-format )।

ক্লাসের *Asyncপদ্ধতিগুলিতে অ্যাক্সেস পেতে আপনার ফাইলে HttpClientসঠিক প্যাকেজ রেফারেন্স থাকা দরকার .csproj:

<ItemGroup>
    <!-- ... -->
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <!-- ... -->
</ItemGroup>

(দেখুন https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference এছাড়াও। আমরা ASP.NET কোর 2.1 এবং টার্গেটিং অ্যাপ্লিকেশন সুপারিশ পরে মাইক্রোসফ্ট.এএসপনেটকোর.এপ মেটাপ্যাকেজ , https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage ব্যবহার করুন )

যেমন পদ্ধতি PostAsJsonAsync, ReadAsAsync, PutAsJsonAsyncএবং DeleteAsyncএখন বাক্সের কাজ করা উচিত। (কোনও নির্দেশিকা ব্যবহারের প্রয়োজন নেই))

আপডেট: প্যাকেজ রেফারেন্স ট্যাগটির আর .NET কোর 3.0 তে আর প্রয়োজন নেই।


.NET কোর 3.1 এর সাথে কাজ করার জন্য আমি পোস্টএএসজেসনসাইঙ্কটি পেতে পারি না। ধন্যবাদ
— ক্রিস কোলেঙ্কো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.