এএসপি.নেট কোর স্থিতি কোড সহ জেএসএনকে ফেরত দেয়


153

আমি আমার। নেট কোর ওয়েব এপিআই নিয়ন্ত্রকের মধ্যে একটি HTTP স্থিতি কোড সহ জেএসএনকে ফেরত দেওয়ার সঠিক উপায়টি সন্ধান করছি। আমি এটি এর মতো ব্যবহার করতে চাই:

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

এটি একটি 4.6 এমভিসি অ্যাপ্লিকেশনে ছিল তবে এখন। নেট কোর নিয়ে আমার কাছে মনে হয় না যে এটি IHttpActionResultআমার কাছে রয়েছে ActionResultএবং এটি এর মতো ব্যবহার করছেন:

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

তবে সার্ভারের প্রতিক্রিয়াটি অদ্ভুত, নীচের চিত্রের মতো:

এখানে চিত্র বর্ণনা লিখুন

আমি কেবল চাই যে ওয়েব এপিআই কন্ট্রোলারটি ওয়েব এপিআই 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);
}

নোট করুন উপরের এই দুটি উদাহরণই মাইক্রোসফ্ট ডকুমেন্টেশন: ফরম্যাটিং রেসপন্স ডেটা থেকে প্রাপ্ত একটি দুর্দান্ত গাইড থেকে এসেছে


অতিরিক্ত স্টাফ

আমি যে সমস্যাটি প্রায়শই দেখতে পাই তা হ'ল আমি ভিএসএর "নতুন প্রকল্প" টেমপ্লেট থেকে ডিফল্ট কনফিগারেশনটি না গিয়ে আমার ওয়েবএপিআইয়ের উপর আরও গ্রানুলার নিয়ন্ত্রণ চেয়েছিলাম

আসুন নিশ্চিত হয়ে নিন যে আপনার কয়েকটি বেসিক নীচে রয়েছে ...

পদক্ষেপ 1: আপনার পরিষেবা কনফিগার করুন

আপনার এএসপি.নেট কোর ওয়েবএপিআইকে স্থিতির কোডের সম্পূর্ণ নিয়ন্ত্রণের সাথে একটি জেএসওএন সিরিয়ালাইজড অবজেক্টের সাথে প্রতিক্রিয়া জানানোর জন্য, আপনাকে সাধারণত যে পদ্ধতিতে পাওয়া গেছে সে পদ্ধতিতে AddMvc()আপনি পরিষেবাটি অন্তর্ভুক্ত করেছেন তা নিশ্চিত করে আপনার শুরু করা উচিত ।ConfigureServicesStartup.cs

এটি জেনে রাখা গুরুত্বপূর্ণ যে AddMvc()জেএসএনের জন্য অন্যান্য অনুরোধের ধরণের সাড়া দেওয়ার সাথে সাথে স্বয়ংক্রিয়ভাবে ইনপুট / আউটপুট ফর্ম্যাটার অন্তর্ভুক্ত থাকবে।

যদি আপনার প্রকল্পের সম্পূর্ণ নিয়ন্ত্রণের প্রয়োজন হয় এবং আপনি আপনার পরিষেবাদিগুলি কঠোরভাবে সংজ্ঞায়িত করতে চান যেমন আপনার ওয়েবএপিআই 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() গিটহাব সংগ্রহস্থল থেকে চেক আউট করতে পারেন

মনে রাখবেন যে এমন কিছু গাইড রয়েছে যা ডিফল্টগুলি "পূর্বাবস্থায়" ফেলে প্রথমে এটি প্রয়োগ না করে সমাধান করার চেষ্টা করবে ... আপনি যদি এখন খোলার উত্সের সাথে কাজ করছেন তবে আপনি যদি এটির কারণ হন তবে এটি অপ্রয়োজনীয় কাজ , খারাপ কোড এবং সত্যই একটি পুরানো অভ্যাস যা শীঘ্রই অদৃশ্য হয়ে যাবে।


পদক্ষেপ 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শিরোনামগুলি সঠিকভাবে সেট করা আছে তা নিশ্চিত করা দরকার । আপনার ক্ষেত্রে (জেএসএন), আপনি এটি সেট আপ করতে চাইবেন ।application/json

যদি আপনি চান যে আপনার ওয়েবএপিআই যদি ডিএসএল হিসাবে JSON হিসাবে প্রতিক্রিয়া জানায় তবে অনুরোধ শিরোনামটি যা নির্দিষ্ট করে তা আপনি দু'ভাবে উপায়ে করতে পারেন তা নির্বিশেষে ।

উপায় 1 আমি পূর্বে প্রস্তাবিত নিবন্ধে প্রদর্শিত ( রেসপন্স ডেটা ফর্ম্যাট করা) আপনি নিয়ামক / ক্রিয়া স্তরে কোনও নির্দিষ্ট বিন্যাসকে বাধ্য করতে পারেন। আমি ব্যক্তিগতভাবে এই পদ্ধতির পছন্দ করি না ... তবে এখানে এটি সম্পূর্ণতার জন্য:

একটি বিশেষ ফর্ম্যাট জোর করা যদি আপনি করতে পারেন এমন কোনও নির্দিষ্ট ক্রিয়াটির জন্য প্রতিক্রিয়া ফর্ম্যাটগুলি সীমাবদ্ধ করতে চান, আপনি [উত্পাদক] ফিল্টার প্রয়োগ করতে পারেন। [উত্পাদক] ফিল্টার একটি নির্দিষ্ট ক্রিয়া (বা নিয়ামক) এর প্রতিক্রিয়া ফর্ম্যাটগুলি নির্দিষ্ট করে। বেশিরভাগ ফিল্টারগুলির মতো এটিও অ্যাকশন, নিয়ামক বা বৈশ্বিক সুযোগে প্রয়োগ করা যেতে পারে।

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

[Produces]ফিল্টার মধ্যে সমস্ত ক্রিয়া বাধ্য করা হবে AuthorsController, JSON- বিন্যস্ত প্রতিক্রিয়া ফিরে যাওয়ার এমনকি যদি অন্যান্য formatters অ্যাপ্লিকেশনের জন্য কনফিগার করা হয় এবং ক্লায়েন্ট একটি প্রদত্ত Acceptহেডার একটি ভিন্ন, উপলব্ধ বিন্যাস অনুরোধ করা হচ্ছে।

উপায় 2 আমার পছন্দসই পদ্ধতিটি ওয়েবএপিআই-র কাছে অনুরোধ করা ফর্ম্যাটটির সাথে সমস্ত অনুরোধের প্রতিক্রিয়া জানানো। যাইহোক, ইভেন্টটি যে এটি অনুরোধ করা ফর্ম্যাটটি গ্রহণ করে না, তারপরে একটি ডিফল্ট (যেমন JSON) এ ফিরে আসুন

প্রথমত, আপনাকে এটি আপনার বিকল্পগুলিতে নিবন্ধন করতে হবে (আমাদের পূর্বনির্ধারিত হিসাবে পূর্বনির্ধারিত আচরণটি পুনরায় কাজ করতে হবে)

options.RespectBrowserAcceptHeader = true; // false by default

পরিশেষে, সার্ভিস বিল্ডারে সংজ্ঞায়িত ফর্ম্যাটরের তালিকায় কেবলমাত্র অর্ডার দেওয়ার মাধ্যমে, ওয়েব হোস্ট তালিকার শীর্ষে অবস্থিত ফর্ম্যাটারে ডিফল্ট হয়ে যাবে (অর্থাত্ পজিশন 0)।

আরও তথ্য এটি। নেট ওয়েব বিকাশ এবং সরঞ্জাম ব্লগ এন্ট্রি পাওয়া যাবে


আপনার প্রচেষ্টার জন্য অনেক ধন্যবাদ Your আপনার উত্তর আমাকে চিয়ার্সের IActionResultসাথে বাস্তবায়নে অনুপ্রাণিত করেছিল return Ok(new {response = "123"});!
রসকো

1
@ রোসকো সমস্যা নেই আশা করি আপনার প্রকল্পটি বিকাশের সাথে সাথে বাকি কোডগুলি আপনাকে গাইড করতে সহায়তা করবে।
Svek

1
: এই বিষয়ে প্রসারিত করার জন্য, আমি এখানে WebAPI বাস্তবায়নে একটি অতিরিক্ত এবং আরো সম্পূর্ণ নির্দেশিকা তৈরি stackoverflow.com/q/42365275/3645638
Svek

অন ​​সেটিংয়ে: রেসপটব্রোসরআসেপ্টহিডার = সত্য; আপনি কেন এটি করছেন তা ব্যাখ্যা করছেন না এবং এটি করা সাধারণত অপ্রয়োজনীয় এবং ভুল। ব্রাউজারগুলি এইচটিএমএল জন্য জিজ্ঞাসা করে, এবং সেহেতু সেগুলি আর যাইহোক বিন্যাস নির্বাচনের উপর প্রভাব ফেলবে না (ক্রোম দুর্ভাগ্যক্রমে এক্সএমএল চেয়ে জিজ্ঞাসা করে)। সংক্ষেপে এটি কিছুটা আমি বন্ধ রাখব এবং আপনি যে
ফ্যালব্যাকটি

@ যিশাইগালটজার আমার উত্তরের সেই অংশটির মূল বিষয়বস্তু হ'ল কীভাবে ক্লায়েন্ট এবং এপিআই যুক্তির মধ্যে ডিফল্ট মিডলওয়্যারটি ভারি করা যায় highlight আমার মতে, RespectBrowserAcceptHeaderবিকল্প সিরিয়ালাইজার ব্যবহার বাস্তবায়ন করার সময় বা আরও সাধারণভাবে সমালোচনা করা হয়, যখন আপনি নিশ্চিত করতে চান যে আপনার ক্লায়েন্টরা ত্রুটিযুক্ত অনুরোধগুলি প্রেরণ করছে না। অতএব, আমি জোর দিয়েছি "যদি আপনার প্রকল্পের পুরো নিয়ন্ত্রণের প্রয়োজন হয় এবং আপনি আপনার পরিষেবাটি কঠোরভাবে সংজ্ঞায়িত করতে চান" এবং সেই বিবৃতিটির উপরেও হাইলাইটেড ব্লক উদ্ধৃতিটি নোট করুন।
Svek

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
এটি নীচে আমার প্রতিক্রিয়া সম্পর্কে অন্তর্দৃষ্টি দিয়েছে। আপনাকে ধন্যবাদ
ওগ নাওয়াইক

এএসপি.নেট কোর 2.2 এর জন্য এই কোডটি সঠিক নয়। আমি এটা চেষ্টা করেছি এবং তা সিরিয়েলাইজ দ্বারা নির্মিত পদ্ধতি। এটি সরাসরি "123" স্ট্রিং অন্তর্ভুক্ত করে না। JSONActionResultJson()
amedina

1
@amedina: আমার খারাপ, শুধু অপসারণ Json(...)করুন এবং স্ট্রিং পাস StatusCode
Tseng

আপনি যখন "ওকে (ফলাফল)" বলবেন - ফলাফল কী? এটি একটি JSON ফর্ম্যাট স্ট্রিং বা এটি কোনও সি # অবজেক্ট (যা স্বয়ংক্রিয়ভাবে JSON স্ট্রিংয়ে রূপান্তরিত হয়?)?
পরিবর্তনশীল

@ পরিবর্তনশীল: সর্বদা একটি পোকো / শ্রেণি / অবজেক্ট। আপনি একটি স্ট্রিং আসতে চান, আপনি পরিবর্তে "বিষয়বস্তু" ব্যবহার করতে হবে
Tseng

42

সঙ্গে 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পরিবর্তে। উভয়ই একই কাজ করে এবং সামগ্রী আলোচনাকে সমর্থন করে supports

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

বা অবজেক্ট রেজাল্টের সাথে আরও বেশি সূক্ষ্ম দানা:

 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(object)
  4. দ্বিতীয় পদ্ধতিটি Produces()অ্যাট্রিবিউট (যা একটি 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
আপনি যে উন্নতি করতে পারেন তা হ'ল মাইক্রোসফ্টে সংজ্ঞায়িত স্ট্যাটাস কোডগুলি ব্যবহার করা spএএসপনেটকোর.এইচটিটিপি: নতুন জসনরসাল্ট (নতুন}}) {স্ট্যাটাস কোড = স্ট্যাটাস কোডস St স্ট্যাটাস 404 নটফাউন্ড return ফিরিয়ে দিন;
ব্রায়ান বেদার্ড

2
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। যদিও জসনকে সার্বজনীনভাবে সেটআপ করার উপায় রয়েছে তবে কখনও কখনও আমাদের উত্তরাধিকারের শেষের দিকগুলি নিয়ে কাজ করতে হয় এবং সেটিংস আলাদা হতে পারে। যতক্ষণ না আমরা কিছু উত্তরাধিকারের
শেষের

মাইক্রোসফ্ট.এএসপনেটকোর.এমভিসি.জেসনসেসল্ট আমার মনে হয় সম্পূর্ণরূপে যোগ্য নাম। কোনও এফকিউএন বা "ব্যবহার" উত্তরগুলি আমাকে নটসো চালায় না। :) অ্যাসেম্বলি মাইক্রোসফট.এএসপনেটকোর.এমভিসি.কোর, সংস্করণ = 3.1.0.0, সংস্কৃতি = নিরপেক্ষ, পাবলিককি টোকেন = adb9793829ddae60 // সি: \ প্রোগ্রাম ফাইলগুলি ot ডটনেট \ প্যাকগুলি \ মাইক্রোসফ্ট.এএসপনেটকোর.এপ.রিফ \ 3.1.0 \ রেফ \ নেটকর্প ৩.১ \ মাইক্রোসফ্ট.এএসপনেটকোর.এমভিসি.কোর.ডিল
গ্রানাডা কোডার

1
এটি আমার জন্য কাজ করেছিল যখন আমার কাছে শক্তিশালী টাইপ ছিল ("আইটিএম ফলাফল = নতুন আইটেম" এই উদাহরণে ... আইটেম রানটাইমের সময় একটি পরিচিত টাইপ)। যখন টাইপটি ~ নয় ~ জানা থাকে তার জন্য আমার উত্তর (এই প্রশ্নের উত্তর) দেখুন। (আমার একটি ডিবিতে জসন ছিল..আর জাসন টাইপটি রানটাইমের সময় জানা ছিল না)। ধন্যবাদ জেরাল্ড
গ্রানাডা কোডার

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/2012 স্থিতি কোড ব্যবহার করার পরিবর্তে

     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

দয়া করে নীচের কোডটি দেখুন, আপনি বিভিন্ন ধরণের জেএসওএন সহ একাধিক স্থিতি কোড পরিচালনা করতে পারেন

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

আমি আমার অ্যাস্প নেট কোর এপি অ্যাপ্লিকেশনগুলিতে যা করি তা হ'ল অবজেক্টরেসাল্ট থেকে প্রসারিত এমন একটি শ্রেণি তৈরি করা এবং সামগ্রী এবং স্থিতির কোডটি কাস্টমাইজ করার জন্য অনেক কনস্ট্রাক্টর সরবরাহ করা। তারপরে আমার সমস্ত কন্ট্রোলার ক্রিয়া ক্রিয়াকলাপকের একজনকে অ্যাপ্রোপিয়েট হিসাবে ব্যবহার করে। আপনি আমার বাস্তবায়নটি এখানে দেখতে পারেন: 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;
    }
}

বেসটি (ডিটিও) লক্ষ্য করুন যে আপনি আপনার বস্তুর দ্বারা ডিটিও প্রতিস্থাপন করেছেন এবং আপনার ভাল হওয়া উচিত।


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

আমি আসপ নেট কোর ৩.১ এ থাকব

#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

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