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