ASP.NET कोर स्थिति कोड के साथ JSON लौटाता है


153

मैं अपने .NET कोर वेब एपीआई नियंत्रक में HTTP स्थिति कोड के साथ JSON को वापस करने के सही तरीके की तलाश कर रहा हूं। मैं इसे इस तरह उपयोग करने के लिए उपयोग करता हूं:

public IHttpActionResult GetResourceData()
{
    return this.Content(HttpStatusCode.OK, new { response = "Hello"});
}

यह एक 4.6 एमवीसी एप्लिकेशन में था, लेकिन अब .NET कोर के साथ मुझे ऐसा नहीं लगता कि IHttpActionResultमेरे पास है ActionResultऔर मैं इस तरह का उपयोग कर रहा हूं :

public ActionResult IsAuthenticated()
{
    return Ok(Json("123"));
}

लेकिन सर्वर से प्रतिक्रिया अजीब है, जैसा कि नीचे की छवि में है:

यहाँ छवि विवरण दर्ज करें

मैं बस चाहता हूँ कि वेब एपीआई नियंत्रक जेएसएन को HTTP स्टेटस कोड के साथ वापस लौटाए जैसा मैंने वेब एपीआई 2 में किया था।


1
"ओके" तरीके स्टेटस कोड के रूप में 200 लौटाते हैं। पूर्वनिर्धारित तरीके सभी सामान्य मामलों को कवर करते हैं। 201 (+ नए संसाधन स्थान के साथ शीर्ष लेख) को वापस करने के लिए, आप CreatedAtRouteविधि आदि का उपयोग करते हैं
Tseng

जवाबों:


191

एक के साथ सबसे बुनियादी संस्करण प्रतिक्रिया JsonResultहै:

// GET: api/authors
[HttpGet]
public JsonResult Get()
{
    return Json(_authorRepository.List());
}

हालाँकि, यह आपके मुद्दे के साथ मदद करने के लिए नहीं जा रहा है क्योंकि आप स्पष्ट रूप से अपने स्वयं के प्रतिक्रिया कोड से निपट नहीं सकते हैं।

स्थिति के परिणामों पर नियंत्रण पाने का तरीका, क्या आपको ऐसा करने की आवश्यकता ActionResultहै, जहां आप फिर StatusCodeResultप्रकार का लाभ उठा सकें ।

उदाहरण के लिए:

// GET: api/authors/search?namelike=foo
[HttpGet("Search")]
public IActionResult Search(string namelike)
{
    var result = _authorRepository.GetByNameSubstring(namelike);
    if (!result.Any())
    {
        return NotFound(namelike);
    }
    return Ok(result);
}

नोट इन दोनों उपरोक्त उदाहरण Microsoft दस्तावेज़ीकरण से उपलब्ध एक महान मार्गदर्शिका से आए थे: स्वरूपण प्रतिक्रिया डेटा


अतिरिक्त सामान

यह मुद्दा मुझे अक्सर आता है कि मैं अपने वेबएपीआई पर अधिक दानेदार नियंत्रण चाहता था बजाय वीएस में "न्यू प्रोजेक्ट" टेम्पलेट से चूक विन्यास के।

चलो सुनिश्चित करें कि आपके पास कुछ मूल बातें हैं ...

चरण 1: अपनी सेवा को कॉन्फ़िगर करें

स्थिति कोड के पूर्ण नियंत्रण के साथ एक JSON सीरियलाइज्ड ऑब्जेक्ट के साथ प्रतिक्रिया करने के लिए अपने ASP.NET कोर वेबएपीआई को प्राप्त करने के लिए, आपको यह सुनिश्चित करके शुरू करना चाहिए कि आपने आमतौर पर पाई जाने वाली AddMvc()अपनी ConfigureServicesविधि में सेवा को शामिल किया है Startup.cs

यह ध्यान रखना महत्वपूर्ण है कि AddMvc()अन्य अनुरोध प्रकारों का जवाब देने के साथ ही JSON के लिए इनपुट / आउटपुट फॉर्मेटर स्वचालित रूप से शामिल होगा।

यदि आपके प्रोजेक्ट को पूर्ण नियंत्रण की आवश्यकता है और आप अपनी सेवाओं को कड़ाई से परिभाषित करना चाहते हैं, जैसे कि आपका WebAPI विभिन्न अनुरोध प्रकारों के साथ कैसे व्यवहार करेगा application/jsonऔर अन्य अनुरोध प्रकारों (जैसे एक मानक ब्राउज़र अनुरोध) का जवाब नहीं देता है, तो आप इसे मैन्युअल रूप से परिभाषित कर सकते हैं। निम्नलिखित कोड:

public void ConfigureServices(IServiceCollection services)
{
    // Build a customized MVC implementation, without using the default AddMvc(), instead use AddMvcCore().
    // https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc/MvcServiceCollectionExtensions.cs

    services
        .AddMvcCore(options =>
        {
            options.RequireHttpsPermanent = true; // does not affect api requests
            options.RespectBrowserAcceptHeader = true; // false by default
            //options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();

            //remove these two below, but added so you know where to place them...
            options.OutputFormatters.Add(new YourCustomOutputFormatter()); 
            options.InputFormatters.Add(new YourCustomInputFormatter());
        })
        //.AddApiExplorer()
        //.AddAuthorization()
        .AddFormatterMappings()
        //.AddCacheTagHelper()
        //.AddDataAnnotations()
        //.AddCors()
        .AddJsonFormatters(); // JSON, or you can build your own custom one (above)
}

आप देखेंगे कि मैंने आपके लिए अपने स्वयं के कस्टम इनपुट / आउटपुट फॉर्मेटर्स को जोड़ने का एक तरीका भी शामिल किया है, इस घटना में आप एक और क्रमांकन प्रारूप (प्रोटोबॉफ़, थ्रिफ्ट, आदि) का जवाब देना चाह सकते हैं।

ऊपर दिए गए कोड का हिस्सा अधिकतर AddMvc()विधि का डुप्लिकेट है । हालाँकि, हम टेम्पलेट के साथ पूर्व-प्रेषित एक के साथ जाने के बजाय प्रत्येक और प्रत्येक सेवा को परिभाषित करके अपने दम पर प्रत्येक "डिफ़ॉल्ट" सेवा को लागू कर रहे हैं। मैंने कोड ब्लॉक में रिपॉजिटरी लिंक जोड़ा है, या आप AddMvc() GitHub रिपॉजिटरी से जांच कर सकते हैं

ध्यान दें कि कुछ मार्गदर्शिकाएँ हैं जो इसे डिफ़ॉल्ट रूप से "पूर्ववत" करके इसे हल करने का प्रयास करेंगे, न कि इसे केवल पहली जगह पर लागू नहीं करने के लिए ... यदि आप इसमें कारक हैं कि अब हम ओपन सोर्स के साथ काम कर रहे हैं, तो यह निरर्थक काम है , बुरा कोड और स्पष्ट रूप से एक पुरानी आदत है जो जल्द ही गायब हो जाएगी।


चरण 2: एक नियंत्रक बनाएं

मैं आपको अपना प्रश्न हल करने के लिए वास्तव में सीधे-सीधे एक दिखाने जा रहा हूं।

public class FooController
{
    [HttpPost]
    public async Task<IActionResult> Create([FromBody] Object item)
    {
        if (item == null) return BadRequest();

        var newItem = new Object(); // create the object to return
        if (newItem != null) return Ok(newItem);

        else return NotFound();
    }
}

चरण 3: अपनी जाँच करें Content-Type औरAccept

आपको यह सुनिश्चित करने की आवश्यकता है कि आपके अनुरोध में आपके Content-Typeऔर Acceptहेडर ठीक से सेट हैं। आपके मामले में (JSON), आप इसे स्थापित करना चाहेंगेapplication/json

यदि आप चाहते हैं कि आपका WebAPI JSON के रूप में डिफ़ॉल्ट रूप से प्रतिक्रिया दे, तो चाहे जो अनुरोध हेडर निर्दिष्ट कर रहा हो वह आपको कुछ तरीकों से कर सकता है

मार्ग 1 जैसा कि मैंने पहले सुझाए गए लेख में दिखाया था ( स्वरूपण प्रतिक्रिया डेटा ) आप नियंत्रक / क्रिया स्तर पर किसी विशेष प्रारूप को बाध्य कर सकते हैं। मुझे व्यक्तिगत रूप से यह तरीका पसंद नहीं है ... लेकिन यहाँ यह पूर्णता के लिए है:

एक विशेष प्रारूप के लिए बाध्य करना यदि आप किसी विशिष्ट क्रिया के लिए प्रतिक्रिया स्वरूपों को प्रतिबंधित करना चाहते हैं, तो आप [प्रोड्यूस] फ़िल्टर लागू कर सकते हैं। [प्रोड्यूस] फिल्टर एक विशिष्ट एक्शन (या कंट्रोलर) के लिए प्रतिक्रिया स्वरूपों को निर्दिष्ट करता है। अधिकांश फिल्टर की तरह, यह एक्शन, कंट्रोलर या ग्लोबल स्कोप पर लागू किया जा सकता है।

[Produces("application/json")]
public class AuthorsController

[Produces]फ़िल्टर की सभी कार्यों के लिए बाध्य करेगा AuthorsController, JSON- प्रारूपित प्रतिक्रियाओं वापस जाने के लिए भले ही अन्य formatters आवेदन के लिए कॉन्फ़िगर किया गया और ग्राहक एक प्रदान की Acceptहैडर एक अलग, उपलब्ध प्रारूप का अनुरोध किया।

मार्ग 2 वेबएपीआई के लिए मेरा पसंदीदा तरीका सभी अनुरोधों के अनुरोध के साथ प्रतिक्रिया करना है। हालाँकि, इस घटना में कि यह अनुरोधित प्रारूप को स्वीकार नहीं करता है, फिर एक डिफ़ॉल्ट पर वापस जाएँ (जैसे। JSON)

सबसे पहले, आपको अपने विकल्पों में पंजीकरण करना होगा (हमें पहले की तरह, डिफ़ॉल्ट व्यवहार को फिर से तैयार करना होगा)

options.RespectBrowserAcceptHeader = true; // false by default

अंत में, सेवा बिल्डर में परिभाषित किए गए फॉर्मेटर्स की सूची को फिर से आदेश देने से, वेब होस्ट सूची के शीर्ष पर आपके द्वारा तैयार किए गए फॉर्मैटर पर डिफ़ॉल्ट हो जाएगा (अर्थात स्थिति 0)।

अधिक जानकारी इस .NET वेब डेवलपमेंट और टूल्स ब्लॉग प्रविष्टि में पाई जा सकती है


आपके द्वारा डाले गए प्रयास के लिए बहुत बहुत धन्यवाद। आपके जवाब ने मुझे चीयर्स के IActionResultसाथ लागू करने के लिए प्रेरित किया return Ok(new {response = "123"});!
रोसको

1
@Rossco कोई समस्या नहीं। उम्मीद है कि बाकी कोड आपकी परियोजना के विकास में आपका मार्गदर्शन करने में मदद करेंगे।
Svek

1
इस विषय का विस्तार करने के लिए, मैंने यहां
WebAPI

सेटिंग पर: RespectBrowserAcceptHeader = true; आप यह नहीं समझा रहे हैं कि आप ऐसा क्यों कर रहे हैं, और ऐसा करना आमतौर पर अनावश्यक और गलत है। ब्राउज़र html के लिए पूछते हैं, और इसलिए उन्हें वैसे भी फॉर्मेट के चयन को प्रभावित नहीं करना चाहिए (जो कि दुर्भाग्य से XML के लिए पूछकर क्रोम करता है)। संक्षेप में यह कुछ ऐसा है जिसे मैं बंद
रखूंगा

@YishaiGalatzer मेरे उत्तर के उस हिस्से का मुख्य विषय यह उजागर करना था कि क्लाइंट और एपीआई लॉजिक के बीच डिफ़ॉल्ट मिडलवेयर को कैसे हटाया जाए। मेरी राय में, RespectBrowserAcceptHeaderएक वैकल्पिक धारावाहिक या अधिक सामान्यतः के उपयोग को लागू करते समय महत्वपूर्ण है, जब आप यह सुनिश्चित करना चाहते हैं कि आपके ग्राहक विकृत अनुरोध नहीं भेज रहे हैं। इसलिए, मैंने जोर दिया "यदि आपकी परियोजना को पूर्ण नियंत्रण की आवश्यकता है और आप अपनी सेवा को कड़ाई से परिभाषित करना चाहते हैं" और उस कथन के ऊपर हाइलाइट किए गए ब्लॉक उद्धरण को भी नोट करें।
३:

57

आपके पास अधिकांश सामान्य स्थिति कोड के लिए पूर्वनिर्धारित विधियां हैं।

  • Ok(result)200प्रतिक्रिया के साथ लौटता है
  • CreatedAtRouteरिटर्न 201+ नया संसाधन URL
  • NotFound रिटर्न 404
  • BadRequestरिटर्न 400आदि।

सभी विधियों की सूची देखें BaseController.csऔर के Controller.csलिए।

लेकिन अगर आप वास्तव में जोर देते हैं कि आप StatusCodeकस्टम कोड सेट करने के लिए उपयोग कर सकते हैं , लेकिन आपको वास्तव में ऐसा नहीं करना चाहिए क्योंकि यह कोड को कम पठनीय बनाता है और आपको हेडर सेट करने के लिए कोड दोहराना होगा (जैसे के लिए CreatedAtRoute)।

public ActionResult IsAuthenticated()
{
    return StatusCode(200, "123");
}

1
इसने मुझे नीचे अपनी प्रतिक्रिया के लिए अंतर्दृष्टि प्रदान की। धन्यवाद
Oge Nwike

यह कोड ASP.NET Core 2.2 के लिए सही नहीं है। मैं सिर्फ यह कोशिश की है और इसे में serializes द्वारा बनाई गई विधि। इसमें सीधे "123" स्ट्रिंग शामिल नहीं है। JSONActionResultJson()
amedina

1
@ नेमिना: मेरी बुर, बस को हटा दें Json(...)और स्ट्रिंग को पास करें StatusCode
Tseng

जब आप कहते हैं "ठीक है (परिणाम)" - परिणाम क्या है? क्या यह JSON प्रारूप स्ट्रिंग है या यह C # ऑब्जेक्ट है (जो स्वचालित रूप से JSON स्ट्रिंग में परिवर्तित हो जाता है?)।
चर

@ परिवर्तनीय: हमेशा एक POCO / वर्ग / वस्तु। यदि आप एक स्ट्रिंग वापस करना चाहते हैं, तो आपको इसके बजाय "सामग्री" का उपयोग करने की आवश्यकता है
Tseng

43

साथ ASP.NET कोर 2.0 , से वस्तु लौटने के लिए आदर्श तरीका है Web API(जो MVC के साथ एकीकृत और एक ही आधार वर्ग का उपयोग करता है Controller) है

public IActionResult Get()
{
    return new OkObjectResult(new Item { Id = 123, Name = "Hero" });
}

नोटिस जो

  1. यह 200 OKस्थिति कोड के साथ लौटता है (यह एक Okप्रकार का है ObjectResult)
  2. यह सामग्री बातचीत करता है, अर्थात यह Acceptअनुरोध में हेडर के आधार पर वापस आ जाएगा । यदि Accept: application/xmlअनुरोध में भेजा जाता है, तो यह वापस आ जाएगा XML। यदि कुछ नहीं भेजा गया है, JSONतो डिफ़ॉल्ट है।

यदि इसे विशिष्ट स्थिति कोड के साथ भेजने की आवश्यकता है , तो इसका उपयोग करें ObjectResultया StatusCodeइसके बजाय। दोनों एक ही काम करते हैं, और सामग्री बातचीत का समर्थन करते हैं।

return new ObjectResult(new Item { Id = 123, Name = "Hero" }) { StatusCode = 200 };
return StatusCode( 200, new Item { Id = 123, Name = "Hero" });

या उससे भी अधिक महीन दाने के साथ ObjectResult:

 Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection myContentTypes = new Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection { System.Net.Mime.MediaTypeNames.Application.Json };
 String hardCodedJson = "{\"Id\":\"123\",\"DateOfRegistration\":\"2012-10-21T00:00:00+05:30\",\"Status\":0}";
 return new ObjectResult(hardCodedJson) { StatusCode = 200, ContentTypes = myContentTypes };

यदि आप विशेष रूप से JSON के रूप में लौटना चाहते हैं, तो कुछ तरीके हैं

//GET http://example.com/api/test/asjson
[HttpGet("AsJson")]
public JsonResult GetAsJson()
{
    return Json(new Item { Id = 123, Name = "Hero" });
}

//GET http://example.com/api/test/withproduces
[HttpGet("WithProduces")]
[Produces("application/json")]
public Item GetWithProduces()
{
    return new Item { Id = 123, Name = "Hero" };
}

नोटिस जो

  1. दोनों JSONदो अलग-अलग तरीकों से लागू होते हैं।
  2. दोनों सामग्री बातचीत को नजरअंदाज करते हैं।
  3. पहली विधि विशिष्ट धारावाहिक के साथ JSON को लागू करती है Json(object)
  4. दूसरी विधि Produces()विशेषता (जो कि a ResultFilter) का उपयोग करके ही करती हैcontentType = application/json

आधिकारिक डॉक्स में उनके बारे में और पढ़ें । फिल्टर के बारे में यहां जानें ।

सरल मॉडल वर्ग जो नमूनों में उपयोग किया जाता है

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
}

10
यह एक अच्छा जवाब है क्योंकि यह सवाल पर केंद्रित है और संक्षिप्त में कुछ व्यावहारिकताओं की व्याख्या करता है।
नेटफेड

33

सबसे आसान तरीका है जो मैं आया हूँ:

var result = new Item { Id = 123, Name = "Hero" };

return new JsonResult(result)
{
    StatusCode = StatusCodes.Status201Created // Status code here 
};

2
मुझे लगता है कि यह @tseng के उत्तर से बेहतर है क्योंकि उनके समाधान में स्टेटस कोड्स आदि के लिए डुप्लिकेट किए गए फ़ील्ड शामिल हैं
क्रिश्चियन सॉयर

2
एक सुधार जिसे आप Microsoft.AspNetCore में परिभाषित StatusCodes का उपयोग करने के लिए कर सकते हैं। इस तरह से करें: नया JsonResult (नया {}) {StatusCode = StatusCodes.Status404NotFound} लौटें;
ब्रायन बेडार्ड

2
यह स्वीकृत उत्तर होना चाहिए। हालाँकि, json को सार्वभौमिक रूप से सेटअप करने के तरीके हैं, कभी-कभी हमें विरासत के समापन बिंदुओं के साथ काम करना पड़ता है और सेटिंग्स भिन्न हो सकती हैं। जब तक हम कुछ विरासत के समापन बिंदुओं का समर्थन करना बंद कर सकते हैं, यह पूर्ण नियंत्रण का अंतिम तरीका है
pqsk

Microsoft.AspNetCore.Mvc.JsonResult मुझे लगता है कि पूरी तरह से योग्य नाम है। कोई FQN या "जवाब" का उपयोग करके मुझे नुटो ड्राइव नहीं करता है। :) असेंबली Microsoft.AspNetCore.Mvc.Core, संस्करण = 3.1.0.0, संस्कृति = तटस्थ, PublicKeyToken = adb9793829ddae60 // C: \ Program Files \ dotnet \ पैक \ Microsoft.AspexCore.App.Ref \ 3.1.0 \ ref \ ref \ netcoreapp3.1 \ Microsoft.AspNetCore.Mvc.Core.dll
ग्रानडाकोड

1
मेरे लिए यह तब काम किया जब मेरे पास एक मजबूत प्रकार था (इस उदाहरण में "ITem परिणाम = नया आइटम" ... आइटम रनटाइम में एक ज्ञात प्रकार है)। मेरा उत्तर (इस प्रश्न के लिए) देखें कि कब प्रकार ~ ~ ज्ञात नहीं है। (मैं एक DB में json था..और json प्रकार रनटाइम में ज्ञात नहीं था)। धन्यवाद गेराल्ड।
ग्रेनडाकोडर

15

यह मेरा सबसे आसान उपाय है:

public IActionResult InfoTag()
{
    return Ok(new {name = "Fabio", age = 42, gender = "M"});
}

या

public IActionResult InfoTag()
{
    return Json(new {name = "Fabio", age = 42, gender = "M"});
}

4

एनम का उपयोग करके 404/201 स्थिति कोड का उपयोग करने के बजाय

     public async Task<IActionResult> Login(string email, string password)
    {
        if (string.IsNullOrWhiteSpace(email) || string.IsNullOrWhiteSpace(password))
        { 
            return StatusCode((int)HttpStatusCode.BadRequest, Json("email or password is null")); 
        }

        var user = await _userManager.FindByEmailAsync(email);
        if (user == null)
        {
            return StatusCode((int)HttpStatusCode.BadRequest, Json("Invalid Login and/or password"));

        }
        var passwordSignInResult = await _signInManager.PasswordSignInAsync(user, password, isPersistent: true, lockoutOnFailure: false);
        if (!passwordSignInResult.Succeeded)
        {
            return StatusCode((int)HttpStatusCode.BadRequest, Json("Invalid Login and/or password"));
        }
        return StatusCode((int)HttpStatusCode.OK, Json("Sucess !!!"));
    }

एनम एक महान विचार है!
भीमबीम

2

बहुत बढ़िया जवाब मुझे यहाँ मिले और मैंने इस विवरण को देखने की कोशिश भी की StatusCode(whatever code you wish)और यह काम कर गया !!!

return Ok(new {
                    Token = new JwtSecurityTokenHandler().WriteToken(token),
                    Expiration = token.ValidTo,
                    username = user.FullName,
                    StatusCode = StatusCode(200)
                });

1
इस तरह! अच्छा सुझाव!
टिकी

0

कृपया नीचे दिए गए कोड को देखें, आप विभिन्न प्रकार के JSON के साथ कई स्थिति कोड प्रबंधित कर सकते हैं

public async Task<HttpResponseMessage> GetAsync()
{
    try
    {
        using (var entities = new DbEntities())
        {
            var resourceModelList = entities.Resources.Select(r=> new ResourceModel{Build Your Resource Model}).ToList();

            if (resourceModelList.Count == 0)
            {
                return this.Request.CreateResponse<string>(HttpStatusCode.NotFound, "No resources found.");
            }

            return this.Request.CreateResponse<List<ResourceModel>>(HttpStatusCode.OK, resourceModelList, "application/json");
        }
    }
    catch (Exception ex)
    {
        return this.Request.CreateResponse<string>(HttpStatusCode.InternalServerError, "Something went wrong.");
    }
}

9
नहीं, यह बुरा है।
फिलिप

0

मैं अपने Asp Net Core Api एप्लिकेशन में क्या करता हूं यह एक ऐसी क्लास बनाना है जो ObjectResult से फैली हुई है और कंटेंट और स्टेटस कोड को कस्टमाइज़ करने के लिए कई कंस्ट्रक्टर्स प्रदान करती है। फिर मेरे सभी नियंत्रक कार्यवाहकों में से एक को एप्रप्ट के रूप में उपयोग करते हैं। आप मेरे कार्यान्वयन पर एक नज़र डाल सकते हैं: https://github.com/melardev/AspNetCoreApiPaginatedCrud

तथा

https://github.com/melardev/ApiAspCoreEcommerce

यहां बताया गया है कि वर्ग कैसा दिखता है (पूर्ण कोड के लिए मेरे रेपो में जाएं):

public class StatusCodeAndDtoWrapper : ObjectResult
{



    public StatusCodeAndDtoWrapper(AppResponse dto, int statusCode = 200) : base(dto)
    {
        StatusCode = statusCode;
    }

    private StatusCodeAndDtoWrapper(AppResponse dto, int statusCode, string message) : base(dto)
    {
        StatusCode = statusCode;
        if (dto.FullMessages == null)
            dto.FullMessages = new List<string>(1);
        dto.FullMessages.Add(message);
    }

    private StatusCodeAndDtoWrapper(AppResponse dto, int statusCode, ICollection<string> messages) : base(dto)
    {
        StatusCode = statusCode;
        dto.FullMessages = messages;
    }
}

जिस आधार (dto) को आप अपनी वस्तु से हटाते हैं उसे नोट करें और आपको जाने के लिए अच्छा होना चाहिए।


0

मुझे यह काम करने के लिए मिला है। मेरा बड़ा मुद्दा मेरा जसन था एक स्ट्रिंग (मेरे डेटाबेस में ... और विशिष्ट / ज्ञात प्रकार नहीं)।

ठीक है, मैं अंत में यह काम करने के लिए मिला है।

////[Route("api/[controller]")]
////[ApiController]
////public class MyController: Microsoft.AspNetCore.Mvc.ControllerBase
////{
                    //// public IActionResult MyMethod(string myParam) {

                    string hardCodedJson = "{}";
                    int hardCodedStatusCode = 200;

                    Newtonsoft.Json.Linq.JObject job = Newtonsoft.Json.Linq.JObject.Parse(hardCodedJson);
                    /* "this" comes from your class being a subclass of Microsoft.AspNetCore.Mvc.ControllerBase */
                    Microsoft.AspNetCore.Mvc.ContentResult contRes = this.Content(job.ToString());
                    contRes.StatusCode = hardCodedStatusCode;

                    return contRes;

                    //// } ////end MyMethod
              //// } ////end class

मैं asp.net कोर 3.1 पर होना

#region Assembly Microsoft.AspNetCore.Mvc.Core, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
//C:\Program Files\dotnet\packs\Microsoft.AspNetCore.App.Ref\3.1.0\ref\netcoreapp3.1\Microsoft.AspNetCore.Mvc.Core.dll

मुझे यहाँ से संकेत मिला है: https://www.jianshu.com/p/7b3e92c42b61

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.