ASP.NET MVC 3 नियंत्रक से 200 HTTP स्टेटस कोड कैसे वापस करें


217

मैं एक एप्लिकेशन लिख रहा हूं जो किसी तीसरे पक्ष की सेवा से POST डेटा स्वीकार कर रहा है।

जब यह डेटा पोस्ट किया जाता है तो मुझे 200 HTTP स्टेटस कोड वापस करना होगा।

मैं अपने नियंत्रक से यह कैसे कर सकता हूं?

जवाबों:


390

अपने नियंत्रक में आप इस तरह से एक HttpStatusCodeResult लौटाएँगे ...

[HttpPost]
public ActionResult SomeMethod(...your method parameters go here...)
{
   // todo: put your processing code here

   //If not using MVC5
   return new HttpStatusCodeResult(200);

   //If using MVC5
   return new HttpStatusCodeResult(HttpStatusCode.OK);  // OK = 200
}

14
या इसके बजाय "नया HttpStatusCodeResult ((int) HttpStatusCode.OK) लौटें;"
डेन

1
@dan, इसकी जरूरत नहीं है। वहाँ अधिभार है कि एक के intरूप में के रूप में अच्छी तरह से ले रहे हैं HttpStatusCode
मेमोरियल

11
एक 204 स्थिति कोड वापस करने के लिए यह करें: नया HttpStatusCodeResult (HttpStatusCode.NoContent) लौटें;
डेविड सिल्वा स्मिथ

1
@ MEMark, मुझे इसे काम करने के लिए डालना था। .NET 4 और MVC 3 का उपयोग करना मुझे एक ओवरराइड के साथ प्रदान नहीं किया गया था जो कि HttpStatusCode को ले जाएगा।
शॉन साउथ

@ शेवसाउथ, मुझे डॉक्स में कोई जानकारी नहीं मिल सकती है कि किन संस्करणों में यह अधिभार है। msdn.microsoft.com/en-us/library/hh413957(v=vs.118).aspx
MEMark

52

200 एक सफल अनुरोध के लिए सामान्य HTTP शीर्ष लेख है। यदि आप सभी की जरूरत है, बस नियंत्रक हैreturn new EmptyResult();


3
HttpStatusCodeResult(...)इसके बजाय आपको इसका उपयोग करना चाहिए क्योंकि आप जो हासिल करने की कोशिश कर रहे हैं उसके बारे में बहुत अधिक स्पष्ट है। स्वीकृत उत्तर के अनुसार।
बेन

42

आप बस निम्न की तरह प्रतिक्रिया की स्थिति कोड को 200 पर सेट कर सकते हैं

public ActionResult SomeMethod(parameters...)
{
   //others code here
   ...      
   Response.StatusCode = 200;
   return YourObject;  
}

10
अपवोट क्योंकि यह आपको अन्य जानकारी के साथ-साथ सिर्फ स्टेटस कोड
Avrohom Yisroel

22
    [HttpPost]
    public JsonResult ContactAdd(ContactViewModel contactViewModel)
    {
        if (ModelState.IsValid)
        {
            var job = new Job { Contact = new Contact() };

            Mapper.Map(contactViewModel, job);
            Mapper.Map(contactViewModel, job.Contact);

            _db.Jobs.Add(job);

            _db.SaveChanges();

            //you do not even need this line of code,200 is the default for ASP.NET MVC as long as no exceptions were thrown
            //Response.StatusCode = (int)HttpStatusCode.OK;

            return Json(new { jobId = job.JobId });
        }
        else
        {
            Response.StatusCode = (int)HttpStatusCode.BadRequest;
            return Json(new { jobId = -1 });
        }
    }

वास्तव में मेरा उपयोग मामला, जोसन ऑब्जेक्ट को वापस करना लेकिन HTTP_STATUS_CODE
sobelito

वेबएपीआई स्थिति कोड वापस करने के लिए, उपयोग करें: नया StatusCodeResult (HttpStatusCode.NotModified, अनुरोध);
जेम्स जॉइस

सबसे अच्छा जवाब क्योंकि यह सभी उपयोग के मामलों को जोड़ता है
vibs2006

7

.NET कोर में ऐसा करने का तरीका निम्नानुसार है (लेखन के समय):

public async Task<IActionResult> YourAction(YourModel model)
{
    if (ModelState.IsValid)
    {
        return StatusCode(200);
    }

    return StatusCode(400);
}

StatusCode विधि रिटर्न का एक प्रकार StatusCodeResult जो लागू करता IActionResult और इस तरह अपनी कार्रवाई की वापसी प्रकार के रूप में इस्तेमाल किया जा सकता।

एक रिफ्लेक्टर के रूप में, आप HTTP स्टेटस कोड का एक का उपयोग करके पठनीयता में सुधार कर सकते हैं जैसे:

return StatusCode((int)HttpStatusCode.OK);

इसके अलावा, आप कुछ निर्मित परिणामों का भी उपयोग कर सकते हैं। उदाहरण के लिए:

return Ok(); // returns a 200
return BadRequest(ModelState); // returns a 400 with the ModelState as JSON

संदर्भ। StatusCodeResult - https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.statuscoderesult?view=aspnetcore-2.1

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