2013-01-07 17 views
5

मैं ASP.NET MVC वेब API प्रोजेक्ट का हैलो दुनिया बनाया है से 400 के बजाय 404 लौटाना:VS2012 का उपयोग कर ASP.NET MVC वेब एपीआई

public class ValuesController : ApiController 
{ 
    // GET api/values 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    // GET api/values/5 
    public string Get(int id) 
    { 
     return "value"; 
    } 
} 

कि नियंत्रक से GET अनुरोध जारी करने के कुछ एक्सएमएल रिटर्न स्थिति 200 के साथ डेटा। अब तक सभी अच्छे हैं।

जब मैं उस विधि, इस तरह निकालें:

public class ValuesController : ApiController 
{ 
    // GET api/values 
    //public IEnumerable<string> Get() 
    //{ 
    // return new string[] { "value1", "value2" }; 
    //} 

    // GET api/values/5 
    public string Get(int id) 
    { 
     return "value"; 
    } 
} 

मैं तो मिल एक 404 नहीं मिला। मैं जो चाहता हूं वह 400 खराब अनुरोध है, क्योंकि एक आईडी प्रदान की जानी चाहिए। इसे कैसे प्राप्त किया जा सकता है?

public class ValuesController : ApiController 
{ 
    // GET api/values 
    public void Get() 
    { 
     throw new HttpResponseException(HttpStatusCode.BadRequest); 
    } 

    // GET api/values/5 
    public string Get(int id) 
    { 
     return "value"; 
    } 
} 
+2

आप क्या चाहते हैं गलत है। 404 यहां सही स्थिति कोड है। – SLaks

+0

@ स्लक्स: सहमत, लेकिन 400 व्यापार की आवश्यकता है। वे इसे एक स्ट्रिंग आईडी पास करने के रूप में देखते हैं, जो int स्ट्रिंग की बजाय अल्फानम स्ट्रिंग को पार करते हैं। – sennett

उत्तर

8

आप Get() विधि रखने के लिए सिर्फ एक त्रुटि फेंक की जरूरत नहीं है:

+0

इसके लिए धन्यवाद। यह वह जवाब है जिसे मैंने स्वचालित परीक्षण और दस्तावेज़ीकरण दोहन के कारण किया था जिसे हमने "संदिग्ध विधि" त्रुटियों को फेंक दिया है। – sennett

4

एक तरीका यह विधि शामिल करने के लिए है, लेकिन फेंक बजाय एक अपवाद है। आईडी विधि द्वारा प्राप्त करने के लिए हस्ताक्षर बदलें:

public string Get(int? id = null) 
{ 
    if (id == null) throw new HttpResponseException(HttpStatusCode.BadRequest); 
    return "value"; 
} 
संबंधित मुद्दे