2012-09-02 9 views
43

मैंने कुछ पिछले प्रश्नों को समस्याओं के साथ मदद के लिए कहा है क्योंकि मैंने एमवीसी 4 वेबपी बीटा को आरसी में अपडेट किया है। मुझे अब क्रम में सबसे अधिक मिला है, लेकिन यहां एक है कि मैं अभी तक कारण नहीं समझ सकता।सरल नियंत्रक जो POST लेता है

इस सरल नियंत्रक के लिए मेरे पास एक पोस्ट है जो एक स्वीकार करता है और जो स्वीकार करता है। जब मैं HTML फॉर्म से अनुरोध भेजकर उनको चलाने का प्रयास करता हूं, तो केवल GET नियंत्रक पाया जाता है जबकि POST एक मुझे निम्न त्रुटि लौटाएगा।

{ 
    "Message": "No HTTP resource was found that matches the request URI 'http://localhost/webapi/api/play/test'.", 
    "MessageDetail": "No action was found on the controller 'Play' that matches the name 'test'." 
} 

पोस्ट नियंत्रक क्यों नहीं मिला है?

नियंत्रकों

public class PlayController : ApiController 
{ 
    [HttpPost] // not found 
    public string Test(string output) 
    { 
     return output; 
    } 

    [HttpGet] // works 
    public string Test2(string output) 
    { 
     return output; 
    } 
} 

HTML प्रपत्र

<form action="http://localhost/webapi/api/play/test" method="post"> 
<input type="text" name="output" /> 
<input type="submit" name="submit" /> 
</form> 

<form action="http://localhost/webapi/api/play/test2" method="get"> 
<input type="text" name="output" /> 
<input type="submit" name="submit" /> 
</form> 

उत्तर

87

Web.API एक छोटा सा picky जब आप "सरल" मूल्यों पोस्ट करना चाहते है।

आप संकेत देने के लिए कि मूल्य URL से लेकिन तैनात डेटा से नहीं आ रही है [FromBody] विशेषता का उपयोग करने की जरूरत है:

[HttpPost] 
public string Test([FromBody] string output) 
{ 
    return output; 
} 

इस बदलाव के साथ अब आपको 404 नहीं मिलेगा लेकिन output हमेशा रहेंगे अशक्त, क्योंकि Web.Api special format में तैनात मूल्यों requries (भेजा जा रहा है सरल प्रकार खंड के लिए खोजें):

दूसरा, ग्राहक निम्न स्वरूप के साथ मूल्य भेजने के लिए की जरूरत है:

=value

विशेष रूप से, नाम/मूल्य जोड़ी का नाम भाग एक साधारण प्रकार के लिए खाली होना चाहिए। नहीं> सभी ब्राउज़रों HTML रूपों, के लिए इस का समर्थन है, लेकिन आप स्क्रिप्ट में इस प्रारूप बनाने ...

तो सुझाव है कि आप एक मॉडल प्रकार बनाना चाहिए:

public class MyModel 
{ 
    public string Output { get; set; } 
} 

[HttpPost] 
public string Test(MyModel model) 
{ 
    return model.Output; 
} 

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

+3

यदि मैं 3 साल बाद चिल्ला सकता हूं, धन्यवाद !! इसने एक मुद्दा हल किया जिसे मैंने बस घंटों तक बिताया। यह वही है जो SO के बारे में है। –

+0

मुझे वही त्रुटि मिली जब मेरे पास webApiConfig.cs और नियंत्रक की प्रक्रिया के बीच पैरामीटर नाम मेल नहीं था। –

संबंधित मुद्दे