Как добавить веб-API к существующему ASP.NET проект веб-приложения MVC 4?


Я хочу добавить ASP.NET Web API к an ASP.NET проект веб-приложения MVC 4, разработанный в Visual Studio 2012. Какие шаги я должен выполнить, чтобы добавить функционирующий веб-API в проект? Я знаю, что мне нужен контроллер, производный от ApiController, но это все, что я знаю.

Дайте мне знать, если мне нужно предоставить больше деталей.

7 332

7 ответов:

шаги, которые мне нужно было выполнить, были:

  1. добавить ссылку на System.Web.Http.WebHost.
  2. добавить App_Start\WebApiConfig.cs (см. фрагмент кода ниже).
  3. Import namespace System.Web.Http на Global.asax.cs.
  4. вызов WebApiConfig.Register(GlobalConfiguration.Configuration) на MvcApplication.Application_Start() (в файле Global.asax.cs),до Регистрация маршрута веб-приложения по умолчанию, поскольку в противном случае он будет иметь приоритет.
  5. добавить контроллер, производный от System.Web.Http.ApiController.

я мог бы тогда узнать хватит с учебник (ваш первый ASP.NET Web API) для определения моего контроллера API.

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

глобальные.асакс.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.сеть САШ.WebApi должен быть установлен для работы выше.

обновление 22.11.2013 - это последний пакет WebApi:

Install-Package Microsoft.AspNet.WebApi

оригинальный ответ (Это старый пакет WebApi)

Install-Package AspNetWebApi

больше подробности.

чтобы добавить WebAPI в мой проект MVC 5.

  1. откройте NuGet Package manager consol и запустите

    PM> Install-Package Microsoft.AspNet.WebApi
    
  2. добавить ссылку на System.Сеть.Маршрутизация, System.Web.Net и System.Net. Http DLL если не там уже

  3. щелкните правой кнопкой мыши папку контроллеры > добавить новый элемент > web > добавить Web API controller

  4. Web.конфигурация будет изменена соответствующим образом Против

  5. добавить Application_Start () {} метод, если его еще нет

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
    
  6. добавить следующий класс (я добавил в global.асакс.cs file)

    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. изменить метод веб-api соответственно

    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>
    

Как только вы добавляете "контроллер WebApi" в папку controllers, Visual Studio автоматически позаботится о зависимостях;

Visual Studio добавила полный набор зависимостей для ASP.NET паутина API 2 для проекта "MyTestProject".

Глобальная.асакс.cs файл в проекте может потребовать дополнительных изменений чтобы включить ASP.NET Web API.

  1. добавьте следующие ссылки на пространство имен:

    используя Система.Сеть.Http; использование системы.Сеть.Маршрутизация;

  2. Если код еще не определяет метод Application_Start, добавьте следующий метод:

    protected void Application_Start() { }

  3. добавьте следующие строки в начало метода Application_Start:

    GlobalConfiguration.Настроить(WebApiConfig.Регистрация);

вы можете установить из nuget как изображение ниже:

enter image description here

или запустите следующую командную строку на консоли диспетчера пакетов:

Install-Package Microsoft.AspNet.WebApi

прежде чем начать слияние проектов MVC и Web API, я бы предложил прочитать о плюсы и минусы чтобы разделить их как разные проекты. Одна очень важная вещь (моя собственная) - это системы аутентификации, которые совершенно разные.

Если вам нужно использовать аутентифицированные запросы как на MVC, так и на Web API, вам нужно помнить, что Web API является RESTful (не нужно сохранять сеанс, простые HTTP-запросы и т. д.), но MVC-нет.

чтобы посмотреть на различия из реализаций просто создайте 2 разных проекта в Visual Studio 2013 из шаблонов: один для MVC и один для Web API (не забудьте включить "индивидуальную аутентификацию" во время создания). Вы увидите много различий в AuthencationControllers.

Итак, будьте в курсе.

вышеуказанное решение работает отлично. Я предпочитаю выбрать опцию Web API при выборе шаблона проекта, как показано на рисунке ниже

Примечание: решение работает с Visual Studio 2013 или выше. Исходный вопрос был задан в 2012 году, и это 2016 год, поэтому добавление решения Visual Studio 2013 или выше.

Project template showing web API option