Как добавить веб-API в существующий проект ASP.NET MVC 4 Web Application?

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

Сообщите мне, если мне нужно предоставить более подробную информацию.

Ответы

Ответ 1

Мне нужно было выполнить следующие шаги:

  • Добавить ссылку на System.Web.Http.WebHost.
  • Добавить App_Start\WebApiConfig.cs (см. фрагмент кода ниже).
  • Импортировать пространство имен System.Web.Http в Global.asax.cs.
  • Вызовите WebApiConfig.Register(GlobalConfiguration.Configuration) в MvcApplication.Application_Start() (в файле Global.asax.cs), прежде чем регистрировать маршрут веб-приложения по умолчанию, как в противном случае.
  • Добавьте контроллер из System.Web.Http.ApiController.

Тогда я мог бы узнать из учебник (ваш первый веб-API ASP.NET) для определения моего контроллера 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 });
    }
}

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:

В Word есть пакет NuGet. Microsoft.AspNet.WebApi должен быть установлен для работы выше.

Ответ 2

ОБНОВЛЕНИЕ 11/22/2013 - это последний пакет WebApi:

Install-Package Microsoft.AspNet.WebApi

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

Install-Package AspNetWebApi

Подробнее подробнее.

Ответ 3

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

  1. Откройте консоль диспетчера пакетов NuGet и запустите

    PM> Install-Package Microsoft.AspNet.WebApi
    
  2. Добавьте ссылки на System.Web.Routing, System.Web.Net и System.Net.Http если их там еще нет

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

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

Ответ 4

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

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

Файл Global.asax.cs в проекте может потребовать дополнительных изменений для включения веб-API ASP.NET.

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

    с использованием System.Web.Http; используя System.Web.Routing;

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

    protected void Application_Start() { }

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

    GlobalConfiguration.Configure(WebApiConfig.Register);

Ответ 5

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

enter image description here

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

Install-Package Microsoft.AspNet.WebApi

Ответ 6

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

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

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

Итак, имейте в виду.

Ответ 7

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

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

Шаблон проекта, показывающий параметр веб-API

Ответ 8

ПРИМЕЧАНИЕ: это просто сокращение этого ответа выше

  1. Откройте консоль диспетчера пакетов NuGet и запустите

    PM> Install-Package Microsoft.AspNet.WebApi
    
  2. Добавьте ссылки на System.Web.Routing, System.Web.Net и System.Net.Http если их там еще нет

  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. Щелкните правой кнопкой мыши папку контроллеров> добавьте новый элемент> Интернет> Добавить контроллер Web 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";
            }  
        }
    }
    

Ответ 9

У меня была такая же проблема, решение было так легко

Щелкните правой кнопкой мыши на solotion и установите Microsoft.ASP.NET.WebApi из раздела "Управление пакетом Nuget для Sulotion".

бум что ли;)