কীভাবে একটি নির্দিষ্ট স্থিতি কোড এবং কন্ট্রোলার থেকে কোনও সামগ্রী ফিরে পাবেন?


119

আমি নীচের উদাহরণস্বরূপ নিয়ামকটি কোনও বিষয়বস্তু ছাড়াই 418 স্থিতি কোড ফিরিয়ে আনতে চাই। স্থিতি কোডটি সেট করা যথেষ্ট সহজ তবে তারপরে মনে হয় অনুরোধের শেষের সিগন্যাল করার জন্য এমন কিছু আছে যা করা দরকার। এমএসসি-র পূর্বে এএসপি.নেট কোর বা ওয়েব ফর্মগুলিতে কল হতে পারে তবে এটিএসপি.নেট Response.End()কোর যেখানে Response.Endনেই সেখানে কীভাবে কাজ করে?

public class ExampleController : Controller
{
    [HttpGet][Route("/example/main")]
    public IActionResult Main()
    {
        this.HttpContext.Response.StatusCode = 418; // I'm a teapot
        // How to end the request?
        // I don't actually want to return a view but perhaps the next
        // line is required anyway?
        return View();   
    }
}

উত্তর:


246

this.HttpContext.Response.StatusCode = 418; // I'm a teapot

কিভাবে অনুরোধ শেষ?

অন্য সমাধানগুলি চেষ্টা করুন, ঠিক:

return StatusCode(418);


আপনি যে StatusCode(???)কোনও HTTP স্থিতি কোডটি ফেরত দিতে ব্যবহার করতে পারেন।


এছাড়াও, আপনি নিবেদিত ফলাফল ব্যবহার করতে পারেন:

সাফল্য:

  • return Ok() ← এইচটিপিপি স্থিতির কোড 200
  • return Created() ← এইচটিপিপি স্থিতির কোড 201
  • return NoContent(); ← এইচটিপিপি স্থিতির কোড 204

ক্লায়েন্ট ত্রুটি:

  • return BadRequest(); ← এইচটিপিপি স্থিতির কোড 400
  • return Unauthorized(); ← এইচটিপিপি স্থিতির কোড 401
  • return NotFound(); ← এইচটিপিপি স্থিতির কোড 404


আরো বিস্তারিত:


62
there is no dedicated result for 418 মাইক্রোসফ্ট, এখানে গুরুতর অনুপস্থিত কার্যকারিতা।
জেস

1
আমি আমার উত্তর আপডেট করেছি কারণ আমি খুঁজে পেয়েছি NoContent();যা কোন ত্রুটি কোড 204 প্রদান করে
লুকাসজ মাকোয়েজ

1
এখানে কন্ট্রোলারবেস ক্লাসের একটি লিঙ্ক রয়েছে, যেখানে এই বাক্সটির বাইরে থাকা ফলাফলের সমস্ত ধরণের সংজ্ঞা দেওয়া আছে। ডকস.মাইক্রোসফট.ইন- ইউএস
টেকনেটিয়াম

3
তবুও, আপনি কেবল নেমস্পেস ( github.com/aspnet/HttpAbstrations/blob/dev/src/… ) StatusCodesথেকে ব্যবহার করতে পারেন । Microsoft.AspNetCore.Http
লুকাশজ মাকোয়েজ

1
হ্যাঁ, এটি কাজ করবে, বা আপনি ব্যবহার করতে পারেনStatusCode(StatusCodes.Status412PreconditionFailed);
লুকাশজ মাকোয়েজ

4

এই কোডটি অ-নেট কোর এমভিসি নিয়ন্ত্রকদের জন্য কাজ করতে পারে:

this.HttpContext.Response.StatusCode = 418; // I'm a teapot
return Json(new { status = "mer" }, JsonRequestBehavior.AllowGet);

4

যদি কেউ এটির সাহায্যে IHttpActionResultওয়েব এপিআই প্রকল্পে থাকতে পারে তবে নীচে সহায়ক হতে পারে।

// GET: api/Default/
public IHttpActionResult Get()
{
    //return Ok();//200
    //return StatusCode(HttpStatusCode.Accepted);//202
    //return BadRequest();//400
    //return InternalServerError();//500
    //return Unauthorized();//401
    return Ok();
}

1

কীভাবে বর্তমান অবজেক্ট ফলাফল তৈরি হয় তা দেখুন। এখানে BadRequestObjectResult। একটি মান এবং স্থিতি কোড সহ অবজেক্ট রেজাল্টের মাত্র একটি বর্ধন।

https://github.com/aspnet/Mvc/blob/master/src/Microsoft.AspNetCore.Mvc.Core/BadRequestObjectResult.cs

আমি 408-তে ঠিক একইভাবে একটি টাইমআউটএক্সেপশন অবজেক্টস রেজাল্ট তৈরি করেছি।

/// <summary>
/// An <see cref="ObjectResult"/> that when executed will produce a Request Timeout (408) response.
/// </summary>
[DefaultStatusCode(DefaultStatusCode)]
public class TimeoutExceptionObjectResult : ObjectResult
{
    private const int DefaultStatusCode = StatusCodes.Status408RequestTimeout;

    /// <summary>
    /// Creates a new <see cref="TimeoutExceptionObjectResult"/> instance.
    /// </summary>
    /// <param name="error">Contains the errors to be returned to the client.</param>
    public TimeoutExceptionObjectResult(object error)
        : base(error)
    {
        StatusCode = DefaultStatusCode;
    }
}

ক্লায়েন্ট:

if (ex is TimeoutException)
{
    return new TimeoutExceptionObjectResult("The request timed out.");
}

1

এটি করার সর্বোত্তম উপায় হ'ল:

return this.StatusCode(StatusCodes.Status418ImATeapot, "Error message");

'স্ট্যাটাসকোডস' এর প্রতিটি ধরণের রিটার্নের স্ট্যাটাস রয়েছে এবং আপনি এই লিঙ্কে তাদের সমস্তটি দেখতে পারেন https://httpstatuses.com/

আপনি একবার আপনার স্ট্যাটাস কোডটি বেছে নেওয়ার পরে, একটি বার্তা সহ এটি ফিরিয়ে দিন।

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