Var olan bir ASP.NET MVC (5) Web Uygulaması projesine Web API'si nasıl eklenir?


148

Yeni bir MVC (5) projesi oluştururken Web API onay kutusunu (projeye ekleyin) işaretlemeyi unuttuğunuzu varsayarsak, Web API eklemek ve onu çalıştırmak için ne yapmanız gerekir?

Bir sürü taşıma sorusu var, ancak hiçbiri bir MVC 5 projesine Web API eklemek için eksiksiz ve güncel adımlara sahip görünmüyordu ve eski yanıtların bazılarından değişmiş gibi görünüyor.

MVC 4'e Web API ekleyin

GlobalConfiguration.Configure (WebApiConfig.Register) MVC 4 Ekleme

Yanıtlar:


254

MVC projesini güncelleyin

En yeni Web API'sini edinmek için Nuget'i kullanın .

Proje - Sağ tıklayın - Nuget Paketlerini Yönet - Web API (Microsoft ASP.NET Web API ...) arayın ve MVC projenize yükleyin.

O halde yine de çalışmak için Web API yönlendirmesine ihtiyacınız var . Gönderen Microsoft'un Yapılandırma ASP.NET Web API 2

App_Start / klasörüne WebApiConfig.cs ekleyin

using System.Web.Http;

namespace WebApplication1
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // TODO: Add any additional configuration code.

            // Web API routes
            config.MapHttpAttributeRoutes();

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

        // WebAPI when dealing with JSON & JavaScript!
        // Setup json serialization to serialize classes to camel (std. Json format)
        var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        formatter.SerializerSettings.ContractResolver =
            new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
        }
    }
}

Bir MVC Projeniz varsa, Global.asax.cs olacaktır , yeni yolları ekleyin. Global.asax.cs yollarının sırası kritiktir. Kullanan eski örnekler olduğunu unutmayın WebApiConfig.Register

Bu satırı Global.asax.cs'ye ekleyin: GlobalConfiguration.Configure(WebApiConfig.Register);

protected void Application_Start()
{
    // Default stuff
    AreaRegistration.RegisterAllAreas();

    // Manually installed WebAPI 2.2 after making an MVC project.
    GlobalConfiguration.Configure(WebApiConfig.Register); // NEW way
    //WebApiConfig.Register(GlobalConfiguration.Configuration); // DEPRECATED

    // Default stuff
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

WebAPI Yardımı

( Çok ) yararlı WebAPI yardım sayfalarını almak için WebAPI.HelpPage'i yükleyin. Bkz http://channel9.msdn.com/Events/Build/2014/3-644 (~ 42 dakika içinde) ne demek için. Çok yardımcı görünüyor!

Nuget Konsolu: Install-Package Microsoft.AspNet.WebApi.HelpPage

WebAPI'nin çalıştığını doğrulamak için:

Denetleyiciler klasörüne -> Yeni öğe ekle -> Web API Denetleyici Sınıfı.

public class TestController : ApiController
{
    //public TestController() { }

    // GET api/<controller>
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }
    //...
}

Artık her zamanki gibi IE / FF / Chrome'da veya almayan testler için JavaScript konsollarında test edebilirsiniz.

(URL'deki yalnızca denetleyici ile yeni Web API Denetleyicisindeki GET () eylemini çağırır, REST'e bağlı olarak yöntemlere / eylemlere otomatik olarak eşlenir, örneğin PUT / POST / GET / DELETE. bunları MVC'deki gibi eyleme göre) URL doğrudan:

http://localhost:PORT/api/CONTROLLERNAME/

Alternatif olarak , denetleyiciyi sorgulamak için jQuery kullanın. Projeyi çalıştırın, Konsolu açın (IE'de F12) ve bir Ajax sorgusu çalıştırmayı deneyin. (PORT & DENETLEYİCİ ADınızı kontrol edin)

$.get( "http://localhost:PORT/api/CONTROLLERNAME/", function( data ) {
    //$( ".result" ).html( data );
    alert( "Get data received:" + data);
});

Yan not: Bir projede MVC ve Web API'yi birleştirirken dikkate alınması gereken bazı artılar / eksiler vardır

WebAPI Yardım doğrulaması: http://localhost:PORT/help


@Iko, koda yazdığın her şeyi yaptım ama çalıştırdığımda bir hata oluştu. bana bir hata veriyor
ninjaXnado

1
Hata mesajını aramayı deneyin. Bu adımlar esasen genel durumda gerekli olan şeydi.
lko

13
"Global.asax.cs rotalarının sırası kritiktir" +1
Jim Aho

Web API'sini doğru ekleyip eklemediğimi nasıl test edeceğimi anlayamadım? Tarayıcıya tam olarak ne yazmalıyım? Yazdım http://localhost:12345/api/Get/5ama bir hata aldım.
jason

3
WebApiConfig.Register'ı (GlobalConfiguration.configuration) çağırarak "eski yolu" kullanıyordum; ve artık hata ayıklayamıyordum. Hata ayıklamaya başlayacaktım ve denetleyici işlevlerime asla ulaşmayacaktı. GlobalConfiguration.Configure (WebApiConfig.Register) "yeni yolu" na geçtim; ve sorun çözüldü.
D. Kermott
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.