ASP.NET ওয়েব এপিআই থেকে HTML ফিরিয়ে দিন


120

এএসপি.নেট এমভিসি ওয়েব এপিআই নিয়ন্ত্রণকারী থেকে এইচটিএমএল কীভাবে ফিরে আসবেন?

আমি নীচের কোডটি চেষ্টা করেছিলাম তবে রেসপন্সের কারণে সংকলন ত্রুটি পেয়েছি rite লেখার সংজ্ঞাটি দেওয়া হয়নি:

public class MyController : ApiController
{
    [HttpPost]
    public HttpResponseMessage Post()
    {
        Response.Write("<p>Test</p>");
        return Request.CreateResponse(HttpStatusCode.OK);
    }
 }

4
আপনি যদি HTML ফিরিয়ে দিতে চান তবে আপনি ওয়েবএপিআই ব্যবহার করছেন কেন? আমার অর্থ এএসপি.এনইটি এমভিসি এবং এএসপি.নেট ওয়েব ফর্মগুলির জন্য এটি।
স্টিলগার

ধন্যবাদ, দুর্দান্ত। আমি নিয়ামককে নিয়মিত নিয়ামক হিসাবে পরিবর্তন করেছি।
আন্দ্রেস

18
@ স্টিলগার একটি কারণ হতে পারে যে তিনি এমভিসি স্ট্যাক ব্যবহার করেন না, কোনও রেন্ডারিং ইঞ্জিন নয় তবে এখনও কিছু এইচটিএমএলকে একটি সার্ভার ফেকড সরবরাহ করতে চান। ব্যবহারের ক্ষেত্রে এমনটি হতে পারে যে আপনার একটি ওয়েব অপি রয়েছে যা কোনও ক্লায়েন্ট সাইড টেম্প্লেটিং ইঞ্জিন সহ কিছু এইচটিএমএল দেয় যা পরবর্তী পর্যায়ে সবকিছু রেন্ডার করে।
প্যাট্রিক দেশজার্ডিনস

3
@ স্টিলগার আরেকটি ব্যবহারের মুখোমুখি হয়েছি যে অ্যাকাউন্ট তৈরির নিশ্চয়তার জন্য প্রতিক্রিয়া জানাতে এইচটিএমএল পৃষ্ঠা ফিরিয়ে দেওয়া হচ্ছে, যখন আপনি ইমেলের মাধ্যমে সরবরাহ করা লিঙ্কটিতে ব্যবহারকারী ক্লিক করেন
wiwi

উত্তর:


257

এএসপি.নেট কোর পদ্ধতির ঘ

যদি আপনার নিয়ামক প্রসারিত হয় ControllerBaseবা Controllerআপনি Content(...)পদ্ধতিটি ব্যবহার করতে পারেন :

[HttpGet]
public ContentResult Index() 
{
    return base.Content("<div>Hello</div>", "text/html");
}

এএসপি.নেট কোর পদ্ধতির ঘ

আপনি যদি Controllerক্লাস থেকে প্রসার না করা বেছে নেন , আপনি নতুন তৈরি করতে পারেন ContentResult:

[HttpGet]
public ContentResult Index() 
{
    return new ContentResult 
    {
        ContentType = "text/html",
        Content = "<div>Hello World</div>"
    };
}

লিগ্যাসি এএসপি.নেট এমভিসি ওয়েব এপিআই

মিডিয়া টাইপের সাথে স্ট্রিং সামগ্রী ফেরত দিন text/html:

public HttpResponseMessage Get()
{
    var response = new HttpResponseMessage();
    response.Content = new StringContent("<div>Hello World</div>");
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
    return response;
}

1
এটি এএসপি.নেট এমভিসি কোর এইচটিপ্রেসপনসেস ম্যাসেজে সমর্থন করছে না
পরশুরাম কালভিকট্ট

@ পরশুরাম আমি স্রেফ আপনার বক্তব্য পরীক্ষা করেছি। আমি এএসপি.নেট কোরে এইচটিপিআরস্পোনমেসেজ ব্যবহার করতে পারি। এটি System.Net.Http এর অধীনে অবস্থিত।
আন্দ্রেই

ওহক ধন্যবাদ তবে এখন মিডিয়াটাইপহাইডারভ্যালু সমর্থন করছে না
পারশুরাম কালভিকট্ট

3
আমি যখন এএসপি.নেট এমভিসি 5 ব্যবহার করে এটি করি তখন আমি প্রতিক্রিয়া পাই। আমি কোনও এইচটিএমএল সামগ্রী ফিরে পাই না। আমি যা পেয়েছি তা হ'ল "স্ট্যাটাস কোড: 200, রিজেনফ্রেস: 'ওকে', সংস্করণ: 1.1, সামগ্রী: System.Net.Http.StringContent, শিরোনাম: {বিষয়বস্তুর ধরণ: পাঠ্য / এইচটিএমএল}"
লোকফ্র্যামফারগো

@ Guyfromfargo আপনি কি চেষ্টা করার চেষ্টা করেছেন [Produces]?
আন্দ্রেই

54

AspNetCore 2.0 দিয়ে শুরু করে, এই ক্ষেত্রে বৈশিষ্ট্যের ContentResultপরিবর্তে এটি ব্যবহার করার পরামর্শ দেওয়া হচ্ছে Produce। দেখুন: https://github.com/aspnet/Mvc/issues/6657#issuecomment-322586885

এটি সিরিয়ালাইজেশন বা সামগ্রী আলোচনার উপর নির্ভর করে না।

[HttpGet]
public ContentResult Index() {
    return new ContentResult {
        ContentType = "text/html",
        StatusCode = (int)HttpStatusCode.OK,
        Content = "<html><body>Hello World</body></html>"
    };
}

4
আমি 2.0 তে আদৌ কাজের জন্য "উত্পাদিত" উত্তর পেতে পারি না, এটি তবে ঠিক কাজ করে।
ফিল্ম

আপনি যদি ফাইল থেকে এইচটিএমএল দেখাতে চান তবে কেবল "var সামগ্রী = System.IO.File.ReadAllText (" index.html ") যুক্ত করুন;"
পাভেল সামোলেঙ্কো

4
হ্যাঁ, আপনি যদি এএসপি.নেট কোর 2.0 ব্যবহার করেন তবে এটিই যাওয়ার উপায়!
জেমস স্কট

এইচটিএমএল ফাইল যদি স্থানীয় ডিরেক্টরিতে থাকে এবং এতে সিএসএস, জেএস লিঙ্ক থাকে তবে কী হবে। আমরা তখন ফাইলটি কীভাবে পরিবেশন করব?
লিঙ্গাম

রেজার পৃষ্ঠাগুলির জন্য, আপনি সরাসরি ContentResult তৈরির পরিবর্তে পেজমোডেল সামগ্রী () পদ্ধতিতে কল করতে পারেন। আমি নিশ্চিত নই যে এটি কন্ট্রোলারদের জন্যও উপলব্ধ কিনা।
carlin.scott
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.