Как добавить веб-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.
-
Откройте консоль диспетчера пакетов NuGet и запустите
PM> Install-Package Microsoft.AspNet.WebApi
-
Добавьте ссылки на System.Web.Routing
, System.Web.Net
и System.Net.Http
если их там еще нет
-
Щелкните правой кнопкой мыши папку контроллеров> добавьте новый элемент> Интернет> Добавить контроллер Web API
-
Web.config будет соответственно изменен VS
-
Добавьте метод Application_Start
если его там еще нет
protected void Application_Start()
{
//this should be line #1 in this method
GlobalConfiguration.Configure(WebApiConfig.Register);
}
-
Добавьте следующий класс (я добавил в файл 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 }
);
}
}
-
Измените метод веб-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();
}
}
}
-
Перестройте и протестируйте
-
Создайте простую 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 как изображение ниже:
Или запустите приведенную ниже командную строку в консоли диспетчера пакетов:
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 и выше.
Ответ 8
ПРИМЕЧАНИЕ: это просто сокращение этого ответа выше
-
Откройте консоль диспетчера пакетов NuGet и запустите
PM> Install-Package Microsoft.AspNet.WebApi
-
Добавьте ссылки на System.Web.Routing
, System.Web.Net
и System.Net.Http
если их там еще нет
-
Добавьте следующий класс
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 }
);
}
}
-
Добавьте метод Application_Start
если его там еще нет (в файле global.asax.cs)
protected void Application_Start()
{
//this should be line #1 in this method
GlobalConfiguration.Configure(WebApiConfig.Register);
}
-
Щелкните правой кнопкой мыши папку контроллеров> добавьте новый элемент> Интернет> Добавить контроллер 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".
бум что ли;)