Varolan bir ASP.NET MVC 4 Web Uygulaması projesine Web API nasıl eklenir?


365

Visual Studio 2012'de geliştirilen bir ASP.NET MVC 4 Web uygulaması projesine bir ASP.NET Web API eklemek istiyorum. Projeye çalışan bir Web API eklemek için hangi adımları gerçekleştirmeliyim? ApiController'dan türeyen bir denetleyiciye ihtiyacım olduğunu biliyorum, ama tüm bildiğim bu.

Daha fazla ayrıntı vermem gerekirse bana bildirin.

Yanıtlar:


455

Yapmam gereken adımlar:

  1. Referans ekle System.Web.Http.WebHost.
  2. Ekle App_Start\WebApiConfig.cs(aşağıdaki kod snippet'ine bakın).
  3. İthalat ad System.Web.Httpiçinde Global.asax.cs.
  4. Çağrı WebApiConfig.Register(GlobalConfiguration.Configuration)içinde MvcApplication.Application_Start()(dosyada Global.asax.cs,) önce aksi öncelik alacağını olarak varsayılan Web Uygulaması rotayı kayıt.
  5. Türetilmiş bir denetleyici ekleyin System.Web.Http.ApiController.

Daha sonra API denetleyicimi tanımlamak için öğreticiden (İlk ASP.NET Web API'niz) yeterince öğrenebilirim .

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);
}

Güncelleme 10.16.2015:

Word'de, yukarıda çalışabilmesi için Microsoft.AspNet.WebApi NuGet paketinin yüklenmesi gerekir.


12
Bu gerçekten yardımcı oldu. Ben de bir referans eklemek zorunda kaldı System.Net.Http, ama bunun dışında bir cazibe gibi çalıştı!
Christofer Eliasson

5
Bir projeyi de MVC3'ten 4'e yükselttim ve ayrıca System.Web.Http'ye bir referans eklemem gerekiyordu.
Damien Sawyer

3
Nuget'i şimdi kullanabilir ve gerçekleşen değişikliklerden haberdar olabilirsiniz! nuget.org/packages/Microsoft.AspNet.WebApi
Chris

3
Web API kaydımı değiştirene kadar bu işe yaramaz: GlobalConfiguration.Configure (WebApiConfig.Register);
KingOfHococrites

3
@LuisGouveia Sanırım geç oldu ama başkası muhtemelen bu daha hızlı ben çözecekti. GlobalConfiguration.Configure (WebApiConfig.Register); Global.asax içinde RouteConfig.RegisterRoutes (RouteTable.Routes) öncesi gider;
Maxim


70

MVC 5 projeme WebAPI eklemek için.

  1. NuGet Package yönetici konsolunu açın ve çalıştırın

    PM> Install-Package Microsoft.AspNet.WebApi
  2. Başvurular ekleyin System.Web.Routing, System.Web.Netve System.Net.Httpzaten DLL değilse orada

  3. Sağ tıklama denetleyicileri klasörü> yeni öğe ekle> web> Web API denetleyicisi ekle

  4. Web.config, VS tarafından uygun şekilde değiştirilecektir

  5. Application_StartHenüz yoksa yöntem ekle

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  6. Aşağıdaki sınıfı ekleyin (global.asax.cs dosyasına ekledim)

    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. Web api yöntemini buna göre değiştirin

    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. Yeniden oluştur ve test et

  9. Basit bir html sayfası oluşturun

    <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>

Bir fark yaratan nokta, @kheya
Rajat

Eklemek istiyorum, api denetleyici adınız CarController gibi Denetleyici ile bitmek zorunda (sadece Araba değil ) !!! Pek çok kişi bunu unutuyor ve "{0} 'adlı denetleyiciyle eşleşen tür bulunamadı"
1_bug

Bu güzel cevapla daha verimli olmak için 4., 8. ve 9. adımları göz ardı edebilirsiniz (çok önemli değiller) Ve 5. ve 6. adımların sırasını değiştirirseniz daha anlamlı olurlar ( kullan, sınıfı kullan, sonra yarat)
Hakan Fıstık

System.Web.Routing, System.Web.Net ve System.Net.Http'e tam olarak nerede referans ekliyoruz?
gabed123

28

Denetleyiciler klasörü altına bir "WebApi Denetleyici" eklediğinizde, Visual Studio bağımlılıkları otomatik olarak halleder;

Visual Studio, ASP.NET Web API 2'nin 'MyTestProject' projesine tüm bağımlılıkları ekledi.

Projedeki Global.asax.cs dosyası, ASP.NET Web API'sını etkinleştirmek için ek değişiklikler gerektirebilir.

  1. Aşağıdaki ad alanı başvurularını ekleyin:

    System.Web.Http kullanarak; System.Web.Routing kullanarak;

  2. Kod zaten bir Application_Start yöntemi tanımlamıyorsa, aşağıdaki yöntemi ekleyin:

    korumalı geçersiz Application_Start () {}

  3. Aşağıdaki satırları Application_Start yönteminin başına ekleyin:

    GlobalConfiguration.Configure (WebApiConfig.Register);


Bu, bunu başarmanın en kolay yoludur.
Adam Smith

1
Burada çalışmıyor. 1. Nuget: Install-Package Microsoft.AspNet.WebApi2. "Web API Denetleyici Sınıfı (v2.1)" adlı yeni bir öğe ekleyin. Sonuç: api denetleyicisini ekler, ancak değişmez Application_Start. Owin ile.
Artyom

2
vs2015 - güncelleme 3 ve web api 2 denetleyicisi eklediğinizde doğru cevap budur.
ModChowdhury

2017'de oldu, ancak WebApi derlemelerimi yükseltmek zorunda kaldım. Ayrıca WebApiConfig sınıfını manuel olarak oluşturmak zorunda kaldım, docs.microsoft.com/tr-tr/aspnet/web-api/overview/advanced/…
johnny

22

Nuget'ten aşağıdaki görüntü olarak kurabilirsiniz:

resim açıklamasını buraya girin

Veya Package Manager Console'da aşağıdaki komut satırını çalıştırın:

Install-Package Microsoft.AspNet.WebApi

3
Denetleyiciyi eklemek dışında başka ne yapmam gerekir? Bu yüzden bu soruyu ilk etapta yayınladım, öğretici bir Web API projesi aldığından gerçekten söylemiyor. Bir API denetleyicisi ekledim, ancak yönlendirilmedi.
aknuds1

1
Öğretici, mevcut bir projeye bir Web API ekleme konusunda pek yardımcı olmadı, bu yüzden cevabımda belirtildiği gibi bir Web API projesinden anladım.
aknuds1

Katılıyorum, Web Uygulaması proje şablonunu kullanırsanız bu sıhhi tesisat zaten yüklü gibi görünüyor.
longda

@cuongle: web api 2.2 sürümü mvc 4 ile kurulacak mı? MVC 4'ü destekliyor mu?
Thomas

20

MVC ve Web API projelerini birleştirmeye başlamadan önce, bunları farklı projeler olarak ayırmak için eksilerini ve artılarını okumayı öneririm . Çok önemli bir şey (benim) tamamen farklı olan kimlik doğrulama sistemleridir.

Hem MVC hem de Web API'sında kimliği doğrulanmış istekleri kullanmanız gerekiyorsa, Web API'sinin RESTful (oturumu tutmaya gerek yoktur, basit HTTP istekleri vb.), Ancak MVC olmadığını hatırlamanız gerekir.

Uygulamaların farklılıklarına bakmak için Visual Studio 2013'te Şablonlar'dan 2 farklı proje oluşturun: biri MVC ve diğeri Web API'sı için (oluşturma sırasında "Bireysel Kimlik Doğrulama" yı açmayı unutmayın). AuthencationControllers'da çok fazla fark göreceksiniz.

Yani, farkında olun.


11

NOT: bu sadece yukarıdaki cevabın bir kısaltmasıdır

  1. NuGet Package yönetici konsolunu açın ve çalıştırın

    PM> Install-Package Microsoft.AspNet.WebApi
  2. Başvurular ekleyin System.Web.Routing, System.Web.Netve System.Net.Httpzaten DLL değilse orada

  3. Aşağıdaki sınıfı ekleyin

    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_StartHenüz yoksa yöntem ekleyin (global.asax.cs dosyasında)

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  5. Sağ tıklama denetleyicileri klasörü> yeni öğe ekle> web> Web API denetleyicisi ekle

    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.Routing, System.Web.Net ve System.Net.Http'e tam olarak nerede referans ekliyoruz?
gabed123

1
Referans Ekle İletişim Kutusundan, bu diyalogu açın ve bu derlemelerin adlarını arayın, zaten eklenmiş olmaları büyük bir olasılıktır. (ama sadece emin olmak için)
Hakan Fıstık

Application_Start yönteminin Global.asax.cs dosyasında global sınıfın bir parçası olması gerekiyor mu?
1919

evet, cevabınızı sizlere not etmek için güncelledim
Hakan Fıstık

1
@HakamFostok Bu bana yardımcı oldu. Teşekkür ederim!
csichar

3

Yukarıdaki çözüm mükemmel çalışıyor. Aşağıdaki resimde gösterildiği gibi proje şablonunu seçerken Web API seçeneğini tercih etmeyi tercih ediyorum

Not: Çözüm, Visual Studio 2013 veya üstü ile çalışır. Orijinal soru 2012 yılında sorulmuştur ve 2016'dır, bu nedenle bir Visual Studio 2013 veya daha üstü çözüm eklenmiştir.

Web API seçeneğini gösteren proje şablonu


2
Web API'sini içeren bir proje oluşturuyorsanız, Web API seçeneğini seçmek daha kolay olacaktır. Seçenek, yukarıdaki yanıtlarda belirtildiği gibi gerekli tüm dosyaları oluşturur.
Sankar Krishnamoorthy

Buradaki sorun Visual studio 2012 ve mvc 4'te. Çözümünüz iyi olsa da, VS 2012'de bu şekilde
yapamazsınız

Bu iyi bir nokta ve VS 2013 ile yukarıdaki çözümü denedim. İşaret ettiğiniz için teşekkürler @netfed.
Sankar Krishnamoorthy

Merhabalar, MVC çözümümde çalışan API öğesini aldım, ancak varsayılan olarak çözümü bir API çözümü olarak çalıştırmaya çalıştı. Ama ben varsayılan olarak bir MVC çözümü olarak çalıştırmak istiyorum ve daha sonra API konuma vb giderseniz, API'leri çalıştırın .. Başka kimse bu sorunu vardı ve çözmek mümkün? Teşekkürler
Chris Cooper

1

Aynı problemim vardı, çözüm çok kolaydı

"Nuget Paketini Sulotion için Yönetin" bölümünden Microsoft.ASP.NET.WebApi kurulumuna sağ tıklayın

patlama bu;)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.