ASP.NET वेब एपीआई से HTML लौटें


120

ASP.NET MVC वेब एपीआई नियंत्रक से HTML कैसे लौटाएं?

मैंने नीचे दिए गए कोड की कोशिश की, लेकिन प्रतिक्रिया के बाद से संकलित त्रुटि हो गई है। यह परिभाषित नहीं है:

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

4
यदि आप HTML वापस करना चाहते हैं तो आप WebAPI का उपयोग क्यों कर रहे हैं? मेरा मतलब यह है कि ASP.NET MVC और ASP.NET WebForms किस लिए हैं।
22

धन्यवाद, उत्कृष्ट। मैंने नियंत्रक को नियमित नियंत्रक में बदल दिया।
एंड्रस

18
@ स्टिलगर एक कारण यह हो सकता है कि वह एमवीसी स्टैक का उपयोग नहीं करता है, न ही कोई रेंडरिंग इंजन, लेकिन फिर भी कुछ एचटीएमएल को एक सर्वर मुखौटा प्रदान करना चाहता है। एक उपयोग मामला यह हो सकता है कि आपके पास एक वेब एप है जो क्लाइंट साइड टेम्प्लेटिंग इंजन के साथ कुछ एचटीएमएल देता है जो बाद के चरण में सब कुछ प्रस्तुत करेगा।
पैट्रिक डेसजार्डिंस

3
@Stilgar मेरे द्वारा उपयोग किए गए एक अन्य मामले में खाता निर्माण की पुष्टि के लिए फीडबैक प्रदान करने के लिए एक html पृष्ठ लौटा रहा है, जब उपयोगकर्ता आपके द्वारा ईमेल के माध्यम से दिए गए लिंक पर क्लिक करता है
wiwi

जवाबों:


257

ASP.NET कोर। दृष्टिकोण १

यदि आपका नियंत्रक विस्तारित है ControllerBaseया Controllerआप Content(...)विधि का उपयोग कर सकते हैं :

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

ASP.NET कोर। दृष्टिकोण २

यदि आप Controllerकक्षाओं से विस्तार नहीं करना चुनते हैं, तो आप नए बना सकते हैं ContentResult:

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

विरासत ASP.NET MVC वेब एपीआई

मीडिया प्रकार के साथ स्ट्रिंग सामग्री लौटें 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
ASP.NET MVC कोर HttpResponseMessage में इसका समर्थन नहीं
परशुराम काल्विकेते

@ परशुराम मैंने अभी आपके बयान की जाँच की है। मैं ASP.NET कोर में HttpResponseMessage का उपयोग कर सकता हूं। यह System.Net.Http के तहत स्थित है।
आंद्रेई

ओह धन्यवाद, लेकिन अब MediaTypeHeaderValue समर्थन नहीं कर रहा है
परशुराम कालविकेत

3
जब मैं ASP.NET MVC 5 का उपयोग करता हूं तो मुझे प्रतिक्रिया मिलती है। मुझे HTML सामग्री वापस नहीं मिलती है। सभी मुझे प्राप्त है "StatusCode: 200, ReasonPhrase: 'OK', संस्करण: 1.1, सामग्री: System.Net.Http.StringContent, शीर्ष लेख: {सामग्री-प्रकार: पाठ / html}"
manfrombargo

@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 पर काम करने का "उत्पादन" जवाब नहीं मिला, लेकिन यह ठीक काम करता है।
13

यदि आप फ़ाइल से html दिखाना चाहते हैं, तो बस "var content = System.IO.File.ReadAllText (" index.html ") जोड़ें;" "
पावेल समोयेलेंको

4
हाँ, अगर आप ASP.NET Core 2.0 का उपयोग कर रहे हैं तो यह जाने का रास्ता है!
जेम्स स्कॉट

क्या होगा यदि HTML फ़ाइल स्थानीय निर्देशिका में है और इसमें सीएसएस, जेएस भी जुड़ा हुआ है। फिर हम फाइल को कैसे सर्व करते हैं?
लिंगम

रेजर पेज के लिए, आप सीधे ContentResult बनाने के बजाय PageModel Content () विधि को कॉल कर सकते हैं। मुझे यकीन नहीं है कि यह नियंत्रकों के लिए भी उपलब्ध है।
carlin.scott
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.