এপি কন্ট্রোলারের সাথে কাঁচা স্ট্রিং কীভাবে ফিরে আসবেন?


125

আমার কাছে এমন একটি এপিআইকন্ট্রোলার রয়েছে যা এক্সএমএল / জেএসওএন পরিবেশন করে তবে আমি আমার এক ক্রিয়াটি খাঁটি এইচটিএমএল ফিরে আসতে চাই। আমি নীচে চেষ্টা করেছিলাম তবে এটি এখনও এক্সএমএল / জেএসওএন ফেরত দেয়।

public string Get()
{
    return "<strong>test</strong>";
}

উপরেরটি এটাই প্রত্যাবর্তন করে:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">&lt;strong&gt;test&lt;/strong&gt;</string>

আশেপাশের এক্সএমএল ট্যাগগুলি ছাড়াও কেবল খাঁটি, অনির্বাচিত পাঠ্য ফেরত দেওয়ার কোনও উপায় আছে (ক্রিয়াকলাপের ভিন্ন কোনও বৈশিষ্ট্য হতে পারে)?

উত্তর:


223

আপনার ওয়েব এপি অ্যাকশনটি এমন একটি HttpResponseMessageসামগ্রী ফিরিয়ে দিতে পারে যার জন্য সামগ্রীতে আপনার সম্পূর্ণ নিয়ন্ত্রণ রয়েছে। আপনার ক্ষেত্রে আপনি একটি স্ট্রিংকন্ট ব্যবহার করতে পারেন এবং সঠিক সামগ্রীর ধরণ উল্লেখ করতে পারেন:

public HttpResponseMessage Get()
{
    return new HttpResponseMessage()
    {
        Content = new StringContent(
            "<strong>test</strong>", 
            Encoding.UTF8, 
            "text/html"
        )
    };
}

অথবা

public IHttpActionResult Get()
{
    return base.ResponseMessage(new HttpResponseMessage()
    {
        Content = new StringContent(
            "<strong>test</strong>", 
            Encoding.UTF8, 
            "text/html"
        )
    });
}

আমি এখনও চেষ্টা করি নি তবে আমি ভাবছি আমি যদি ডেটা টাইপটি এইচটিএমএল সেট করে কাজ করি?
এডিট করুন

5
না এটা কাজ করবে না। ওয়েব এপিআই-তে কেবল অন্তর্নির্মিত এক্সএমএল এবং জেএসএন ফর্ম্যাটর রয়েছে। অন্য কিছুর জন্য আপনাকে নিজের ফর্ম্যাটর তৈরি করতে হবে বা আমার উত্তর হিসাবে প্রদর্শিত হিসাবে আপনার পদ্ধতিগুলি থেকে কাঁচা এইচটিটিপিআরস্পোনসেসেসগুলি ফিরিয়ে দিতে হবে।
দারিন দিমিত্রভ

HttpResponseMessage System.Net.Http নেমস্পেসে অবস্থিত।
জেমস লরুক

8

আর একটি সম্ভাব্য সমাধান। ওয়েব এপিআই 2 এ আমি বেস.সন্টেন্ট () পদ্ধতিটি ব্যবহার করেছি APIController:

    public IHttpActionResult Post()
    {
        return base.Content(HttpStatusCode.OK, new {} , new JsonMediaTypeFormatter(), "text/plain");
    }

আমার এটি IE9 বাগ পেতে যেখানে এটি JSON সামগ্রী ডাউনলোড করার চেষ্টা চালিয়ে গেছে তার কাছাকাছি যাওয়ার দরকার ছিল। XmlMediaTypeFormatterমিডিয়া ফর্ম্যাটর ব্যবহার করে এটি এক্সএমএল-জাতীয় ডেটার জন্যও কাজ করা উচিত ।

আশা করি যে কাউকে সাহায্য করবে।


ওপি এইচটিএমএল স্ট্রিং ফিরিয়ে দেওয়ার জন্য জিজ্ঞাসা করছিল .. এমন স্ট্রিংটি কোথায়? এবং কীভাবে জসনমিডিয়া টাইপফর্মেটর এইচটিএমএল ফিরে আসতে পারে?
joedotnot

4

শুধু return Ok(value)কাজ করবে না, এটি হিসাবে বিবেচিত হবে IEnumerable<char>

পরিবর্তে ব্যবহার return Ok(new { Value = value })বা সিমিলার।


0

আমি একটি এমভিসি নিয়ন্ত্রক পদ্ধতি থেকে নিম্নলিখিত ওয়েবপিআই 2 কন্ট্রোলার পদ্ধতিটিকে কল করি:

<HttpPost>
Public Function TestApiCall(<FromBody> screenerRequest As JsonBaseContainer) As IHttpActionResult
    Dim response = Me.Request.CreateResponse(HttpStatusCode.OK)
    response.Content = New StringContent("{""foo"":""bar""}", Encoding.UTF8, "text/plain")
    Return ResponseMessage(response)
End Function

আমি এটিকে রুটিন থেকে এপ নেট সার্ভারে কল করি:

Public Async Function PostJsonContent(baseUri As String, requestUri As String, content As String, Optional timeout As Integer = 15, Optional failedResponse As String = "", Optional ignoreSslCertErrors As Boolean = False) As Task(Of String)
    Return Await PostJsonContent(baseUri, requestUri, New StringContent(content, Encoding.UTF8, "application/json"), timeout, failedResponse, ignoreSslCertErrors)
End Function

Public Async Function PostJsonContent(baseUri As String, requestUri As String, content As HttpContent, Optional timeout As Integer = 15, Optional failedResponse As String = "", Optional ignoreSslCertErrors As Boolean = False) As Task(Of String)
    Dim httpResponse As HttpResponseMessage

    Using handler = New WebRequestHandler
        If ignoreSslCertErrors Then
            handler.ServerCertificateValidationCallback = New Security.RemoteCertificateValidationCallback(Function(sender, cert, chain, policyErrors) True)
        End If

        Using client = New HttpClient(handler)
            If Not String.IsNullOrWhiteSpace(baseUri) Then
                client.BaseAddress = New Uri(baseUri)
            End If

            client.DefaultRequestHeaders.Accept.Clear()
            client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))
            client.Timeout = New TimeSpan(TimeSpan.FromSeconds(timeout).Ticks)

            httpResponse = Await client.PostAsync(requestUri, content)

            If httpResponse.IsSuccessStatusCode Then
                Dim response = Await httpResponse.Content.ReadAsStringAsync
                If Not String.IsNullOrWhiteSpace(response) Then
                    Return response
                End If
            End If
        End Using
    End Using

    Return failedResponse
End Function

0

আপনি যদি ওয়েবএপিআইয়ের পরিবর্তে এমভিসি ব্যবহার করেন তবে আপনি বেসটি ব্যবহার করতে পারেন on বিষয়বস্তু পদ্ধতি:

return base.Content(result, "text/html", Encoding.UTF8);

-2

আমাদের অবশ্যই আমাদের এইপিআই এর এইচটিএমএল থেকে খাঁটি ডেটা এবং ইউআইতে ফর্ম্যাট ডেটা ফর্ম্যাট না করতে চেষ্টা করতে হবে তবে আপনি ব্যবহার করতে পারেন:

return this.Request.CreateResponse(HttpStatusCode.OK, 
     new{content=YourStringContent})

এটা আমার জন্য কাজ করে


6
একটি ডামি বস্তুতে কোনও কিছু মোড়ানো এটিকে আর খাঁটি করে না। এইচটিএমএল যদি আপনার ডেটা হয় তবে এটি লুকানোর কোনও বুদ্ধি নেই।
Jouni Heikniemi

ওয়েব এপিআইয়ের ধারণাটি ডেটা ফেরত দেওয়া, এবং প্রয়োজনীয় এইচটিএমএল যুক্ত করতে ইউআই ছেড়ে চলে যেতে পারে, সম্ভবত আমাদের এমন কিছু ক্ষেত্রে থাকতে পারে যেখানে ডেটা এইচটিএমএল, তবে আমি মনে করি এটি আদর্শ নয়।
ব্যবহারকারী 1075679
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.