Asp.net WEBAPI থেকে স্পষ্টভাবে একটি JSON স্ট্রিং ফিরিয়ে দিন?


88

কিছু ক্ষেত্রে আমার কাছে নিউটনসফট জেএসওএন.এনইটি আছে এবং আমার নিয়ামক হিসাবে আমি আমার কন্ট্রোলার থেকে কেবল জবজেক্টটি ফিরিয়ে দিই এবং সব ভাল।

তবে আমার একটি কেস রয়েছে যেখানে আমি অন্য পরিষেবা থেকে কিছু কাঁচা জেএসওন পাই এবং এটি আমার ওয়েবএপিআই থেকে ফেরত দেওয়া দরকার। এই প্রসঙ্গে আমি নিউটনসফটটি ব্যবহার করতে পারি না, তবে আমি যদি তখন স্ট্রিং থেকে একটি JOBJECT তৈরি করতে পারি (যা মনেহীন প্রক্রিয়াজাতকরণের ওভারহেডের মতো মনে হয়) এবং ফিরে আসি এবং সমস্ত কিছু বিশ্বের সাথে ভাল হয়ে যায়।

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

আমি কীভাবে স্পষ্টভাবে আমার ওয়েবএপিআই নিয়ন্ত্রক পদ্ধতি থেকে একটি জেএসএন ফিরিয়ে দিতে পারি?

উত্তর:


201

কয়েকটি বিকল্প আছে। সবচেয়ে সহজটি হ'ল আপনার পদ্ধতিটি একটি ফেরত দেওয়া উচিত HttpResponseMessage, এবং StringContentআপনার স্ট্রিংয়ের উপর ভিত্তি করে সেই প্রতিক্রিয়া তৈরি করুন, নীচের কোডের মতো কিছু:

public HttpResponseMessage Get()
{
    string yourJson = GetJsonFromSomewhere();
    var response = this.Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
    return response;
}

এবং নাল বা খালি JSON স্ট্রিং পরীক্ষা করে

public HttpResponseMessage Get()
{
    string yourJson = GetJsonFromSomewhere();
    if (!string.IsNullOrEmpty(yourJson))
    {
        var response = this.Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
        return response;
    }
    throw new HttpResponseException(HttpStatusCode.NotFound);
}

4
দুর্দান্ত। আমি একটি JSON স্ট্রিংকে উপার্জন করা হয় এবং একটি স্ট্রিং কিন্তু যে চালু অনিবার্য অতিরিক্ত "ফলাফলের প্রায় যেমন ফিরে এই ঠিক করা
dumbledad

4
এটা বিরক্তিকর। আপনি আসলে তৈরি করতে HttpResponseMessage response, তারপর ধার্য StringContentকরতে .Contentসম্পত্তি। আপনি যদি কনস্ট্রাক্টরে স্ট্রিংকন্টকে বরাদ্দ করেন তবে এটি কাজ করে না।
সুমায়রে

16

ওয়েবএপিআই 2-র সাথে প্রবর্তিত আইএইচটিপিএ্যাকশনআরসাল্ট ইন্টারফেসটি ব্যবহার করার জন্য এখানে @ কার্লোসফিগুইয়ের সমাধানটি রূপান্তরিত হয়েছে:

public IHttpActionResult Get()
{
    string yourJson = GetJsonFromSomewhere();
    if (string.IsNullOrEmpty(yourJson)){
        return NotFound();
    }
    var response = this.Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
    return ResponseMessage(response);
}

2

আপনি যদি বিশেষত ওয়েবএসপিআই বৈশিষ্ট্য (এক্সএমএলকে অনুমতি দেওয়ার মতো) ব্যবহার না করে কেবল সেই জেএসএনকে ফিরিয়ে দিতে চান তবে আপনি সর্বদা আউটপুটটিতে সরাসরি লিখতে পারেন। ধরে নিই যে আপনি এএসপি.এনইটি দিয়ে এটি হোস্ট করছেন, আপনার Responseঅবজেক্টটিতে অ্যাক্সেস রয়েছে , সুতরাং আপনি স্ট্রিং হিসাবে সেভাবে এটি লিখতে পারেন, তবে আপনাকে আসলে আপনার পদ্ধতি থেকে কোনও ফেরত দেওয়ার দরকার নেই - আপনি ইতিমধ্যে লিখেছেন আউটপুট প্রবাহে প্রতিক্রিয়া পাঠ্য।


1

ওয়েব এপিআই জিইটি পদ্ধতি থেকে জেসন ডেটা ফেরত দেওয়ার নমুনা উদাহরণ

[HttpGet]
public IActionResult Get()
{
            return Content("{\"firstName\": \"John\",  \"lastName\": \"Doe\", \"lastUpdateTimeStamp\": \"2018-07-30T18:25:43.511Z\",  \"nextUpdateTimeStamp\": \"2018-08-30T18:25:43.511Z\");
}

4
বিষয়বস্তু কোথা থেকে আসে? একটি সম্পূর্ণ যোগ্য নাম বা "ব্যবহার" বিবৃতি সহায়ক হবে helpful
গ্রানাডা কোডার

0

এগুলিও কাজ করে:

[HttpGet]
[Route("RequestXXX")]
public ActionResult RequestXXX()
{
    string error = "";
    try{
        _session.RequestXXX();
    }
    catch(Exception e)
    {
        error = e.Message;
    }
    return new JsonResult(new { error=error, explanation="An error happened"});
}

[HttpGet]
[Route("RequestXXX")]
public ActionResult RequestXXX()
{
    string error = "";
    try{
        _session.RequestXXX();
    }
    catch(Exception e)
    {
        error = e.Message;
    }
    return new JsonResult(error);
}

0

এটি নেট কোর 3.1 এ আমার জন্য কাজ করে।

private async Task<ContentResult> ChannelCosmicRaysAsync(HttpRequestMessage request)
{
    // client is HttpClient
    using var response = await client.SendAsync(request).ConfigureAwait(false); 

    var responseContentString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

    Response.StatusCode = (int)response.StatusCode;
    return Content(responseContentString, "application/json");
}
public Task<ContentResult> X()
{
    var request = new HttpRequestMessage(HttpMethod.Post, url);
    (...)

    return ChannelCosmicRaysAsync(request);
}

ContentResultহয় Microsoft.AspNetCore.Mvc.ContentResult

দয়া করে নোট করুন এটি চ্যানেল শিরোনামগুলি নয়, তবে আমার ক্ষেত্রে এটি আমার প্রয়োজন।

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