[C#] कई क्रियाएं मिलीं जो वेब एपी में अनुरोध से मेल खाते हैं


Answers

वेब एपीआई 2 के रूप में अद्यतन करें।

इस एपीआई कॉन्फ़िगरेशन के साथ आपकी WebApiConfig.cs फ़ाइल में:

public static void Register(HttpConfiguration config)
{
    //// Web API routes
    config.MapHttpAttributeRoutes(); //Don't miss this

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

आप हमारे नियंत्रक को इस तरह से रूट कर सकते हैं:

[Route("api/ControllerName/Summary")]
[HttpGet]
public HttpResponseMessage Summary(MyVm vm)
{
    rturn null;
}

[Route("api/ControllerName/FullDetails")]
[HttpGet]
public HttpResponseMessage FullDetails()
{
    return null;
}

जहां नियंत्रकनाम आपके नियंत्रक का नाम है (बिना "नियंत्रक")। यह आपको ऊपर वर्णित मार्ग के साथ प्रत्येक कार्रवाई करने की अनुमति देगा।

आगे पढ़ने के लिए: http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

Question

जब मैं 2 "प्राप्त करें" विधियों का प्रयास करता हूं तो मुझे यह त्रुटि मिलती रहती है

अनुरोध से मेल खाते कई क्रियाएं मिलीं: वेबपीआई

मैं इस बारे में अन्य समान प्रश्नों पर स्टैक पर देख रहा था लेकिन मुझे यह नहीं मिला।

मेरे पास 2 अलग-अलग नाम हैं और "HttpGet" विशेषता का उपयोग कर रहे हैं

[HttpGet]
public HttpResponseMessage Summary(MyVm vm)
{
    return null;
}

[HttpGet]
public HttpResponseMessage FullDetails()
{
    return null;
}



कृपया जांचें कि आपके पास दो विधियां हैं जिनमें अलग-अलग नाम और समान पैरामीटर हैं।

यदि ऐसा है तो कृपया किसी भी विधि को हटाएं और कोशिश करें।




वेब पर बहुत सारी खोज करने के बाद और रूटिंग के लिए सबसे उपयुक्त फॉर्म ढूंढने का प्रयास करने पर निम्नलिखित पाया गया है

config.Routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { id =RouteParameter.Optional }, new { id = @"\d+" });
config.Routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}");

ये मानचित्रण क्रिया नाम मैपिंग और मूल http सम्मेलन (GET, POST, PUT, DELETE) दोनों पर लागू होते हैं




सुनिश्चित करें कि आप डिफ़ॉल्ट नियंत्रक के लिए अपने कंट्रोलर विधियों को सजाने नहीं हैं | PUT | POST | [HttpPost / Put / Get / Delete] विशेषता के साथ क्रियाएं हटाएं। मैंने अपने वेनिला पोस्ट कंट्रोलर एक्शन में यह एटिब्यूट जोड़ा था और इससे 404 का कारण बन गया।

उम्मीद है कि यह किसी की मदद करता है क्योंकि यह बहुत निराशाजनक हो सकता है और रुकावट में प्रगति ला सकता है।




कार्यों का उपयोग किए बिना विकल्प होंगे:

  1. तरीकों में से एक को एक अलग नियंत्रक में ले जाएं, ताकि वे टकराव न करें।

  2. केवल एक विधि का प्रयोग करें जो परम लेता है, और यदि यह आपके कोड से दूसरी विधि को शून्य करता है।




वेब एपीआई नियंत्रक के बजाय एमवीसी नियंत्रक का उपयोग करने के कारण यह संभव है। वेब एपीआई नियंत्रक में नेमस्पेस की जांच करें, यह निम्नानुसार होना चाहिए

using System.Net;
using System.Net.Http;
using System.Web.Http;

यदि नामस्थान निम्नानुसार है तो यह वेब एपीआई नियंत्रक विधि कॉलिंग में त्रुटि प्रदान करता है

using System.Web;
using System.Web.Mvc;



Links