किसी मौजूदा ASP.NET MVC 4 वेब अनुप्रयोग परियोजना में वेब एपीआई कैसे जोड़ें?


365

मैं ASP.NET MVC 4 वेब एप्लिकेशन प्रोजेक्ट में ASP.NET वेब एपीआई को जोड़ना चाहता हूं , जिसे विजुअल स्टूडियो 2012 में विकसित किया गया है। प्रोजेक्ट में एक कामकाजी वेब एपीआई को जोड़ने के लिए मुझे कौन से कदम उठाने चाहिए? मुझे पता है कि मुझे ApiController से व्युत्पन्न नियंत्रक की आवश्यकता है, लेकिन मुझे पता है कि सभी के बारे में है।

यदि मुझे अधिक विवरण प्रदान करने की आवश्यकता हो तो मुझे बताएं।

जवाबों:


455

मुझे जिन चरणों की आवश्यकता थी, वे थे:

  1. के संदर्भ में जोड़ें System.Web.Http.WebHost
  2. जोड़ें App_Start\WebApiConfig.cs(नीचे कोड स्निपेट देखें)।
  3. आयात नाम स्थान System.Web.Httpमें Global.asax.cs
  4. कॉल WebApiConfig.Register(GlobalConfiguration.Configuration)में MvcApplication.Application_Start()(फाइल में Global.asax.cs), से पहले कि के रूप में डिफ़ॉल्ट वेब अनुप्रयोग मार्ग दर्ज की अन्यथा पूर्वता ले जाएगा।
  5. से प्राप्त नियंत्रक जोड़ें System.Web.Http.ApiController

मैं तब अपने एपीआई नियंत्रक को परिभाषित करने के लिए ट्यूटोरियल (आपका पहला ASP.NET वेब एपीआई) से पर्याप्त सीख सकता था ।

App_Start \ WebApiConfig.cs:

using System.Web.Http;

class WebApiConfig
{
    public static void Register(HttpConfiguration configuration)
    {
        configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
            new { id = RouteParameter.Optional });
    }
}

Global.asax.cs:

using System.Web.Http;

...

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

अद्यतन 10.16.2015:

वर्ड में यह है, NuGet पैकेज Microsoft.AspNet.WebApi को ऊपर काम करने के लिए स्थापित किया जाना चाहिए।


12
यह वास्तव में मददगार था। मुझे एक संदर्भ भी जोड़ना था System.Net.Http, लेकिन इसके अलावा, यह एक आकर्षण की तरह काम करता था!
क्रिस्टोफर एलियासन 13

5
मैंने MVC3 से 4 तक के प्रोजेक्ट को अपग्रेड किया और साथ ही System.Web.Http के लिए एक संदर्भ जोड़ने की आवश्यकता थी।
डेमियन सॉयर

3
आप अब नगेट का उपयोग कर सकते हैं, और जो भी बदलाव होते हैं, उसके ऊपर बने रहें! nuget.org/packages/Microsoft.AspNet.WebApi
क्रिस

3
जब तक मैं अपना वेब एपि रजिस्टर नहीं बदल लेता, मुझे यह काम नहीं मिलेगा: GlobalConfiguration.Configure (WebApiConfig.Register);
KingOfHypocrites

3
@LuisGouveia मुझे लगता है कि यह देर से है, लेकिन कोई और शायद इसे जल्दी हल करेगा अगर यह मेरे पास था। GlobalConfiguration.Configure (WebApiConfig.Register); in Global.asax, RouteConfig.RegisterRoutes (RouteTable.Routes) से पहले चला जाता है;
मैक्सिम

77

अद्यतन 11/22/2013 - यह नवीनतम WebApi पैकेज है:

Install-Package Microsoft.AspNet.WebApi

मूल उत्तर (यह एक पुराना WebApi पैकेज है)

Install-Package AspNetWebApi

अधिक जानकारी


3
2013 के रूप में यह एक विरासत पैकेज है और आप Install-Package Microsoft.AspNet.WebApiअभी चाहते हैं। देखें nuget.org/packages/Microsoft.AspNet.WebApi
क्रिस

70

मेरी MVC 5 परियोजना में WebAPI जोड़ने के लिए।

  1. NuGet पैकेज प्रबंधक कंसोल खोलें और चलाएँ

    PM> Install-Package Microsoft.AspNet.WebApi
  2. अगर वहाँ पहले से ही नहीं है System.Web.Routing, System.Web.Netऔर System.Net.Httpdll के संदर्भ जोड़ें

  3. कंट्रोलर फ़ोल्डर पर राइट क्लिक करें> नया आइटम जोड़ें> वेब> वेब एपीआई नियंत्रक जोड़ें

  4. Web.config को VS के अनुसार संशोधित किया जाएगा

  5. Application_Startयदि पहले से ही नहीं है तो विधि जोड़ें

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  6. निम्न वर्ग जोड़ें (मैंने Global.asax.cs फ़ाइल में जोड़ा)

    public static class WebApiConfig
    {
         public static void Register(HttpConfiguration config)
         {
             // Web API routes
             config.MapHttpAttributeRoutes();
    
             config.Routes.MapHttpRoute(
                 name: "DefaultApi",
                 routeTemplate: "api/{controller}/{id}",
                 defaults: new { id = RouteParameter.Optional }
             );
         }
     }
  7. तदनुसार वेब एपि विधि को संशोधित करें

    namespace <Your.NameSpace.Here>
    {
        public class VSController : ApiController
        {
            // GET api/<controller>   : url to use => api/vs
            public string Get()
            {
                return "Hi from web api controller";
            }
    
            // GET api/<controller>/5   : url to use => api/vs/5
            public string Get(int id)
            {
                return (id + 1).ToString();
            }
        }
    }
  8. पुनर्निर्माण और परीक्षण

  9. एक सरल HTML पेज बनाएँ

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>    
        <script src="../<path_to_jquery>/jquery-1.9.1.min.js"></script>
        <script type="text/javascript">
            var uri = '/api/vs';
            $(document).ready(function () {
                $.getJSON(uri)
                .done(function (data) {
                    alert('got: ' + data);
                });
    
                $.ajax({
                    url: '/api/vs/5',
                    async: true,
                    success: function (data) {
                        alert('seccess1');
                        var res = parseInt(data);
                        alert('got res=' + res);
                    }
                });
            });
        </script>
    </head>
    <body>
    ....
    </body>
    </html>

जिस बिंदु ने एक अंतर पैदा किया, वह वेबएपिकॉन्फ़िग.रजिस्टर को पहली पंक्ति में रख रहा था, जैसा कि @kheya
रजत

मैं जोड़ना चाहूंगा, आपके एपीआई नियंत्रक का नाम कंट्रोलर के साथ समाप्त होना है , जैसे CarController (सिर्फ कार नहीं ) !!! इतने सारे लोग इसके बारे में भूल जाते हैं और त्रुटि संदेश प्राप्त करते हैं "कोई प्रकार नहीं पाया गया था जो {0} 'नाम के नियंत्रक से मेल खाता है
1_bug

इस अच्छे उत्तर के साथ अधिक कुशल होने के लिए आप चरण 4, 8 और 9 की अवहेलना कर सकते हैं (वे इतने आवश्यक नहीं हैं) और यदि आप चरण 5 और 6 के क्रम को स्वैप करते हैं तो वे अधिक समझ में आएंगे (तब वर्ग बनाना बेहतर होगा इसका उपयोग करें, इसके बजाय कक्षा का उपयोग करें (फिर इसे बनाएं)
हकन Fıstık

हम वास्तव में System.Web.Rout, System.Web.Net और System.Net.Http के संदर्भ कहाँ जोड़ रहे हैं?
गाबेड्ज़ीज़ g

28

जैसे ही आप नियंत्रक फ़ोल्डर के तहत "वेबएपी नियंत्रक" जोड़ते हैं, विजुअल स्टूडियो स्वचालित रूप से निर्भरता का ख्याल रखता है;

विजुअल स्टूडियो ने ASP.NET वेब एपीआई 2 के लिए 'MyTestProject' प्रोजेक्ट के लिए निर्भरता का पूरा सेट जोड़ा है।

प्रोजेक्ट में Global.asax.cs फ़ाइल को ASP.NET वेब API को सक्षम करने के लिए अतिरिक्त परिवर्तनों की आवश्यकता हो सकती है।

  1. निम्नलिखित नामस्थान संदर्भ जोड़ें:

    System.Web.Http का उपयोग कर; System.Web.Rout का उपयोग करना;

  2. यदि कोड पहले से ही Application_Start विधि को परिभाषित नहीं करता है, तो निम्न विधि जोड़ें:

    संरक्षित शून्य Application_Start () {}

  3. Application_Start पद्धति की शुरुआत में निम्नलिखित पंक्तियाँ जोड़ें:

    GlobalConfiguration.Configure (WebApiConfig.Register);


यह अब तक इसे प्राप्त करने का सबसे आसान तरीका है।
एडम स्मिथ

1
यहां काम नहीं करता है। 1. नगेट: Install-Package Microsoft.AspNet.WebApi2. नया आइटम जोड़ें "वेब एपीआई नियंत्रक वर्ग (v2.1)"। परिणाम: एपीआई नियंत्रक जोड़ता है लेकिन बदलता नहीं है Application_Start। ओविन के साथ।
Artyom

2
यह सही उत्तर है जब आपके पास vs2015 है - 3 को अपडेट करें और वेब एपीआई 2 नियंत्रक को जोड़ें।
ModChowdhury

यह 2017 में हुआ, लेकिन मुझे अपनी WebApi असेंबली को अपग्रेड करना पड़ा। मुझे मैन्युअल रूप से WebApiConfig
johnny

22

आप निगेट से नीचे की छवि के रूप में स्थापित कर सकते हैं:

यहां छवि विवरण दर्ज करें

या, पैकेज प्रबंधक कंसोल पर निम्न कमांड लाइन चलाएँ:

Install-Package Microsoft.AspNet.WebApi

3
तो, नियंत्रक को जोड़ने के अलावा मुझे और क्या करने की आवश्यकता है? यही कारण है कि मैंने इस प्रश्न को पहली जगह में पोस्ट किया है, ट्यूटोरियल वास्तव में नहीं कहता है क्योंकि यह एक वेब एपीआई परियोजना को मानता है। मैंने एक एपीआई नियंत्रक जोड़ा है, लेकिन इसे रूट नहीं किया गया है।
एकन्यूड्स १

1
किसी मौजूदा प्रोजेक्ट में वेब एपीआई को जोड़ने के संबंध में ट्यूटोरियल बहुत मदद का नहीं था, इसलिए मैंने अपने जवाब में बताए अनुसार, इसे वेब एपीआई प्रोजेक्ट से लिया।
एकनौड्स १

मैं सहमत हूं, ऐसा लगता है कि यदि आप वेब ऐप प्रोजेक्ट टेम्पलेट का उपयोग करते हैं तो यह प्लंबिंग पहले से इंस्टॉल है।
longda

@ congongle: वेब एपी संस्करण 2.2 को mvc 4 के साथ स्थापित किया जाएगा? यह MVC 4 का समर्थन करता है?
थॉमस

20

इससे पहले कि आप एमवीसी और वेब एपीआई परियोजनाओं का विलय करना शुरू करें, मैं उन्हें विभिन्न परियोजनाओं के रूप में अलग करने के लिए विपक्ष और पेशेवरों के बारे में पढ़ने का सुझाव दूंगा । एक बहुत महत्वपूर्ण बात (मेरा अपना) प्रमाणीकरण प्रणाली है, जो पूरी तरह से अलग है।

यदि आपको MVC और Web API दोनों पर प्रमाणित अनुरोधों का उपयोग करने की आवश्यकता है, तो आपको यह याद रखना होगा कि Web API RESTful (सत्र, साधारण HTTP अनुरोध, आदि रखने की आवश्यकता नहीं है), लेकिन MVC नहीं है।

कार्यान्वयन के मतभेदों को देखने के लिए टेम्प्लेट से विजुअल स्टूडियो 2013 में 2 अलग-अलग प्रोजेक्ट बनाएं: एक एमवीसी के लिए और एक वेब एपीआई के लिए (निर्माण के दौरान "व्यक्तिगत प्रमाणीकरण" चालू करना न भूलें)। आपको AuthencationControllers में बहुत अंतर दिखाई देगा।

तो, जागरूक रहें।


11

नोट: यह ऊपर दिए गए इस उत्तर का एक संक्षिप्त नाम है

  1. NuGet पैकेज प्रबंधक कंसोल खोलें और चलाएँ

    PM> Install-Package Microsoft.AspNet.WebApi
  2. अगर वहाँ पहले से ही नहीं है System.Web.Routing, System.Web.Netऔर System.Net.Httpdll के संदर्भ जोड़ें

  3. निम्न वर्ग जोड़ें

    public static class WebApiConfig
    {
         public static void Register(HttpConfiguration config)
         {
             // Web API routes
             config.MapHttpAttributeRoutes();
    
             config.Routes.MapHttpRoute(
                 name: "DefaultApi",
                 routeTemplate: "api/{controller}/{id}",
                 defaults: new { id = RouteParameter.Optional }
             );
         }
     }
  4. Application_Startयदि पहले से ही नहीं है (तो Global.asax.cs फ़ाइल में) विधि जोड़ें

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  5. कंट्रोलर फ़ोल्डर पर राइट क्लिक करें> नया आइटम जोड़ें> वेब> वेब एपीआई नियंत्रक जोड़ें

    namespace <Your.NameSpace.Here>
    {
        public class VSController : ApiController
        {
            // GET api/<controller>   : url to use => api/vs
            public string Get()
            {
                return "Hi from web api controller";
            }  
        }
    }

हम वास्तव में System.Web.Rout, System.Web.Net और System.Net.Http के संदर्भ कहाँ जोड़ रहे हैं?
गाबेड्सिज् g

1
Add Reference Dialog से, उस डायलॉग को खोलें और उन असेंबली के नामों की खोज करें, इस बात की काफी संभावना है कि वे पहले ही जुड़ चुके हैं। (लेकिन सिर्फ यह सुनिश्चित करने के लिए)
हकन Fıstık

क्या Application_Start पद्धति Global.asax.cs में वैश्विक वर्ग का एक हिस्सा माना जाता है?
gabed123

हां, मैंने अपने उत्तर को यह प्रदर्शित करने के लिए अपडेट किया, कि आप नोट के लिए
हकन Fıstık

1
@ हकमफॉस्टोक ने मेरी मदद की। धन्यवाद!
सीएससी 19

3

उपरोक्त समाधान पूरी तरह से काम करता है। मैं प्रोजेक्ट टेम्पलेट का चयन करते समय वेब एपीआई विकल्प चुनना पसंद करता हूं जैसा कि नीचे दी गई तस्वीर में दिखाया गया है

नोट: समाधान दृश्य स्टूडियो 2013 या उच्चतर के साथ काम करता है। मूल प्रश्न 2012 में पूछा गया था और यह 2016 है, इसलिए एक समाधान विजुअल स्टूडियो 2013 या उच्चतर जोड़ रहा है।

वेब एपीआई विकल्प दिखा प्रोजेक्ट टेम्पलेट


2
यदि आप एक ऐसी परियोजना बना रहे हैं जिसमें वेब एपीआई शामिल है, तो वेब एपीआई विकल्प चुनना आसान होगा। उपर्युक्त उत्तरों के अनुसार विकल्प सभी आवश्यक फाइलों का निर्माण करेगा।
शंकर कृष्णमूर्ति

यहाँ समस्या हाथ में दृश्य स्टूडियो 2012 और mvc 4 में है। हालांकि आपका समाधान ठीक है, आप इसे वीएस 2012 में इस तरह से नहीं कर सकते हैं
netfed

यह एक अच्छा बिंदु है और मैंने वीएस 2013 के साथ उपरोक्त समाधान की कोशिश की है। धन्यवाद @netfed को इंगित करने के लिए।
शंकर कृष्णमूर्ति

हाय सब, मुझे मेरे एमवीसी समाधान में एपीआई तत्व काम कर रहा है, लेकिन डिफ़ॉल्ट रूप से इसने समाधान को एपीआई समाधान के रूप में चलाने की कोशिश की। लेकिन मैं चाहता हूं कि यह एमवीसी समाधान के रूप में डिफ़ॉल्ट रूप से चले और फिर अगर आप एपीआई स्थान आदि पर जाएं, तो एपीआई चलाएं .. क्या किसी और के पास यह मुद्दा था और इसे हल करने में सक्षम था? धन्यवाद
क्रिस कूपर

1

मुझे एक ही समस्या थी, समाधान इतना आसान था

"इंजील के लिए नौगेट पैकेज प्रबंधित करें" से Microsoft.ASP.NET.WebApi स्थापित करें।

उछाल यह है;)

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