अनुरोधित संसाधन HTTP विधि 'GET' का समर्थन नहीं करता है


103

मेरा मार्ग सही ढंग से कॉन्फ़िगर किया गया है, और मेरे तरीकों में सजा हुआ टैग है। मुझे अभी भी "अनुरोधित संसाधन HTTP विधि 'GET' संदेश का समर्थन नहीं करता है?

[System.Web.Mvc.AcceptVerbs("GET", "POST")]
[System.Web.Mvc.HttpGet]
public string Auth(string username, string password)
{
  // Décoder les paramètres reçue.
  string decodedUsername = username.DecodeFromBase64();
  string decodedPassword = password.DecodeFromBase64();

  return "value";
}

यहाँ मेरे मार्ग हैं:

config.Routes.MapHttpRoute(
    name: "AuthentificateRoute",
    routeTemplate: "api/game/authentificate;{username};{password}",
    defaults: new { controller = "Game",
                    action = "Auth", 
                    username = RouteParameter.Optional, 
                    password = RouteParameter.Optional },
    constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { controller = "Home", id = RouteParameter.Optional }
);

जवाबों:


227

कृपया System.Web से विशेषताओं का उपयोग करें। अपने WebAPI कार्यों पर Http नाम स्थान:

    [System.Web.Http.AcceptVerbs("GET", "POST")]
    [System.Web.Http.HttpGet]
    public string Auth(string username, string password)
    {...}

इसका कारण यह काम नहीं करता है क्योंकि आप उन विशेषताओं का उपयोग कर रहे थे जो MVC नामस्थान से हैं System.Web.MvcSystem.Web.Httpनाम स्थान की कक्षाएं वेबएपीआई के लिए हैं


11
धिक्कार है .. धन्यवाद! मैं अविश्वसनीय रूप से पागल हो जाने वाला था कि आप इस तरह की छोटी चीजों पर समय कैसे बर्बाद कर सकते हैं ..
रशिनो

1
वास्तव में, यह सही उत्तर क्यों है , इसका स्पष्टीकरण यहाँ आवश्यक है!
जैक्सिडियन

6
स्पष्टीकरण के साथ संपादित उत्तर।
मैगी यिंग

2
क्या मैं RouteConfig.cs में [System.Web.Http.AcceptVerbs ("GET", "POST")] और [System.Web.Http.HttpGet] को निर्दिष्ट कर सकता हूं ताकि मुझे प्रत्येक API में इसे जोड़ने की आवश्यकता न हो।
गिरीश गुप्ता

8
मुझे इस प्रोजेक्ट के लिए अपने 10 एप में से केवल एक में ही ऐसा करने की आवश्यकता क्यों पड़ी? मैंने अन्य 9 एपिस की तरह ही एपीआई बनाया। कितनी निराशा होती है।
दान ब्यूलियू

3

बस इस विशेषता का उपयोग करें

[System.Web.Http.HttpGet]

कोड की इस पंक्ति की आवश्यकता नहीं है:

[System.Web.Http.AcceptVerbs("GET", "POST")]

3

मेरे मामले में, मार्ग हस्ताक्षर विधि पैरामीटर से अलग था। मेरे पास id थी, लेकिन मैं documentId को पैरामीटर के रूप में स्वीकार कर रहा था, जिससे समस्या पैदा हुई।

[Route("Documents/{id}")]   <--- caused the webapi error
[Route("Documents/{documentId}")] <-- solved
public Document Get(string documentId)
{
  ..
}

आपका आशीर्वाद :) १
Shai Cohen

2

मैं एक ही मुद्दे का अनुभव कर रहा था .. मेरे पास पहले से ही 4 नियंत्रक थे और ठीक काम कर रहे थे, लेकिन जब मैंने इसे जोड़ा तो यह वापस आ गया "अनुरोधित संसाधन HTTP विधि 'GET' का समर्थन नहीं करता है"। मैंने यहां और कुछ अन्य प्रासंगिक लेखों में सब कुछ करने की कोशिश की, लेकिन समाधान के प्रति उदासीन था, जैसा कि दान बी ने उत्तर के जवाब में उल्लेख किया था, मेरे पास पहले से ही ठीक काम करने वाले अन्य लोग थे।

मैं थोड़ी देर के लिए चला गया, वापस आया, और तुरंत महसूस किया कि जब मैंने नियंत्रक को जोड़ा था तो इसे "नियंत्रक" वर्ग के तहत नेस्टेड किया गया था न कि "ApiController" वर्ग के तहत जो मेरे अन्य नियंत्रकों के अधीन थे। मैं मान रहा हूं कि मैंने Visual Studio में .cs फ़ाइल बनाने के लिए गलत मचान विकल्प चुना है। इसलिए मैंने System.Web.Http नाम स्थान को शामिल किया, मूल वर्ग को बदल दिया, और सब कुछ अतिरिक्त विशेषताओं या रूटिंग के बिना काम करता है।

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