404 после добавления веб-API в существующее веб-приложение MVC
Здесь большой вопрос: Как добавить веб-API в существующий проект веб-приложения ASP.NET MVC 4?
К сожалению, этого было недостаточно для решения моей проблемы. Я пробовал дважды, чтобы быть уверенным, что я не сделал ничего плохого. Я нажал правой кнопкой мыши на "Контроллеры" и добавил элемент "Контроллер Web API 2 с действиями, используя Entity Framework", где я выбрал свой класс модели и контекст db. Все прошло хорошо... но все же... каждый раз, когда я пытался получить доступ /api/Rest, я получал ошибку 404 (имя моего контроллера - RestController).
Ответы
Ответ 1
Это работает!!! Я не хотел верить, но угадайте, что проблема была связана с маршрутизацией Global.asax .
Пока это не работает:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register); //I AM THE 4th
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
Он работает с:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register); //I AM THE 2nd
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
Сумасшедший, я знаю.
Ответ 2
Если вы хотите использовать WebAPI в существующем проекте MVC (5), вам необходимо выполнить следующие действия:
1.Добавить пакеты WebApi:
Microsoft.AspNet.WebApi
Microsoft.AspNet.WebApi.Client
Microsoft.AspNet.WebApi.Core
Microsoft.AspNet.WebApi.WebHost
Newtonsoft.Json
2. Добавить файл WebApiConfig.cs
в папку App_Start
:
using System.Web.Http;
namespace WebApiTest
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
3. Добавьте следующую строку в Glabal.asax
:
GlobalConfiguration.Configure(WebApiConfig.Register);
Важное примечание: вам нужно добавить строку выше точно после AreaRegistration.RegisterAllAreas();
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
//\\
GlobalConfiguration.Configure(WebApiConfig.Register);
//\\
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
Ответ 3
"При добавлении новых маршрутов ALWAYS KEEP IN MIND вам нужно добавить определенный маршрут сверху, а затем более общий маршрут в конце. В противном случае ваше веб-приложение никогда не получит правильную маршрутизацию".
Вышеприведенная цитата отсюда:
http://www.codeproject.com/Tips/771809/Understanding-the-Routing-Framework-in-ASP-NET-MVC
Я знаю, что ответ уже дан, но это может помочь понять, почему нам нужно
GlobalConfiguration.Configure(WebApiConfig.Register);
до
RouteConfig.RegisterRoutes(RouteTable.Routes);