Як додати веб-API до існуючого проекту веб-додатків ASP.NET MVC (5)?


146

Припустимо, що ви забули встановити прапорець Веб-API (додати його до проекту) під час створення нового проекту MVC (5), що вам потрібно зробити, щоб додати веб-API та налагодити його роботу?

Існує маса питань щодо міграції, але, схоже, жоден не мав повних та сучасних кроків для додавання Web API до проекту MVC 5, і, здається, він змінився від деяких старих відповідей.

Додайте веб-API до MVC 4

Додавання GlobalConfiguration.Configure (WebApiConfig.Register) MVC 4

Відповіді:


253

Оновіть проект MVC

Використовуйте Nuget, щоб отримати найновіший веб-API.

Проект - Клацніть правою кнопкою миші - Керуйте пакунками Nuget - Знайдіть веб-API (Microsoft ASP.NET Web API ...) та встановіть його у проект MVC.

Тоді вам все-таки потрібно запустити маршрутизацію веб-API на роботу. Від Microsoft Налаштування ASP.NET Web API 2

Додайте WebApiConfig.cs до папки App_Start /

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

Якщо у вас є проект MVC, він матиме Global.asax.cs , додайте нові маршрути. Порядок маршрутів Global.asax.cs є критичним. Зауважте, що є застарілі приклади, які використовують WebApiConfig.Register

Додайте цей рядок до Global.asax.cs: 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

Щоб отримати ( дуже ) корисні довідкові сторінки WebAPI, встановіть WebAPI.HelpPage. Дивіться http://channel9.msdn.com/Events/Build/2014/3-644 (~ 42 хвилин) про те, що це робить. Це виглядає дуже корисно!

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

Щоб перевірити, чи працює WebAPI:

У папку контролерів -> Додати новий елемент -> Клас контролера Web API.

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";
    }
    //...
}

Тепер ви можете протестувати в IE / FF / Chrome, як зазвичай, або в консолях JavaScript для тестування, яке не отримує.

(За допомогою лише контролера в URL-адресі він буде викликати дію GET () у новому контролері Web API, він автоматично відображається на методи / дії залежно від REST, наприклад PUT / POST / GET / DELETE. Вам не потрібно дзвонити їх за дією, як у MVC) URL-адреса безпосередньо:

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

Крім того, використовуйте jQuery для запиту контролера. Запустіть проект, відкрийте консоль (F12 в IE) і спробуйте запустити запит Ajax. (Перевірте своє ПОРТ та КОНТРОЛЕРНАЛ)

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

Побічна примітка: Є кілька плюсів / мінусів, які слід враховувати при поєднанні MVC та Web API в проекті

Підтвердження довідки WebAPI: http://localhost:PORT/help


@Iko я зробив усе, що ви написали на коді, але я помилка, коли я запускаю його. це дає мені помилку
ninjaXnado

1
Спробуйте знайти повідомлення про помилку. Ці кроки були по суті тим, що потрібно було в загальному випадку.
lko

13
"Порядок маршрутів Global.asax.cs є критичним" +1
Джим Ахо,

Я не міг зрозуміти, як перевірити, якщо я правильно додав Web API? Що саме потрібно написати в браузер? Я писав, http://localhost:12345/api/Get/5але отримав помилку.
Язон

3
Я використовував "старий спосіб" виклику WebApiConfig.Register (GlobalConfiguration.configuration); і я вже не міг налагоджувати. Я б розпочав налагодження, і це ніколи не досягне моїх функцій контролера. Я змінив на "новий спосіб" GlobalConfiguration.Configure (WebApiConfig.Register); і проблема була виправлена.
Д. Кермотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.