Jak dodać Web API do istniejącego ASP.NET projekt aplikacji webowej MVC 4?

Chcę dodać ASP.NET Web API do ASP.NET projekt aplikacji webowej MVC 4, opracowany w Visual Studio 2012. Jakie kroki należy wykonać, aby dodać funkcjonujące API internetowe do projektu? Wiem, że potrzebuję kontrolera pochodzącego z Apicontrollera, ale to wszystko, co wiem.

Daj mi znać, jeśli będę musiał podać więcej szczegółów.

Author: aknuds1, 2012-08-16

7 answers

Kroki, które musiałem wykonać to:

  1. Dodaj odniesienie do System.Web.Http.WebHost.
  2. dodaj App_Start\WebApiConfig.cs (patrz fragment kodu poniżej).
  3. Importuj przestrzeń nazw System.Web.Http w Global.asax.cs.
  4. Call WebApiConfig.Register(GlobalConfiguration.Configuration) in MvcApplication.Application_Start() (in file Global.asax.cs), przed zarejestrowaniem domyślnej trasy aplikacji webowej, ponieważ w przeciwnym razie miałoby to pierwszeństwo.
  5. Dodaj kontroler pochodzący z System.Web.Http.ApiController.

Mógłbym się nauczyć wystarczająco dużo z tutorial (Twój pierwszy ASP.NET Web API) do zdefiniuj mój kontroler 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);
}

Aktualizacja 10.16.2015:

Word ma to, pakiet NuGet Microsoft.AspNet.WebApi musi być zainstalowany, aby powyższe działanie działało.

 421
Author: aknuds1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-16 06:38:15

Aktualizacja 22/11/2013 - jest to najnowszy pakiet WebApi:

Install-Package Microsoft.AspNet.WebApi

Oryginalna odpowiedź (jest to starszy Pakiet WebApi)

Install-Package AspNetWebApi

Więcej szczegóły .

 71
Author: cdeutsch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-21 06:42:29

Aby dodać WebAPI w moim projekcie MVC 5.

  1. Otwórz NuGet Package manager consol i uruchom

    PM> Install-Package Microsoft.AspNet.WebApi
    
  2. Dodaj referencje do systemu.Www.Routing, System.Web.Net i biblioteki DLL systemu. Net. Http, jeśli jeszcze nie ma

  3. Kliknij prawym przyciskiem myszy katalog controllers > add new item > web > Add Web API controller

  4. Www.config zostanie odpowiednio zmodyfikowany przez VS

  5. Dodaj metodę Application_Start () {} jeśli nie ma już

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
    
  6. Dodaj następującą klasę (dodałem w global.asax.plik 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. Odpowiednio zmodyfikować metodę 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";
            }
    
            // GET api/<controller>/5   : url to use => api/vs/5
            public string Get(int id)
            {
                return (id + 1).ToString();
            }
        }
    }
    
  8. Odbudować i przetestować

  9. Zbuduj prostą stronę 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>
    
 41
Author: kheya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-21 18:52:30

Jak tylko dodasz "WebApi Controller" w folderze controllers, Visual Studio automatycznie zajmie się zależnościami;

Visual Studio dodało pełny zestaw zależności dla ASP.NET www API 2 do projektu "MyTestProject".

Globalny.asax.plik cs w projekcie może wymagać dodatkowych zmian aby włączyć ASP.NET Web API.

  1. Dodaj następujące odwołania do przestrzeni nazw:

    Korzystanie Z Systemu.Www.Http; za pomocą System.Www.Routing;

  2. Jeśli kod nie definiuje jeszcze metody Application_Start, dodaj następującą metodę:

    Protected void Application_Start() { }

  3. Dodaj następujące linie na początku metody Application_Start:

    GlobalConfiguration.Configure (WebApiConfig.Rejestr);

 25
Author: Teoman shipahi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-22 05:13:11

Możesz zainstalować z nuget jako poniższy obrazek:

Tutaj wpisz opis obrazka

Lub uruchom poniższy wiersz poleceń na konsoli Menedżera pakietów:

Install-Package Microsoft.AspNet.WebApi
 21
Author: Cuong Le,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-03 21:51:22

Zanim zaczniesz łączyć projekty MVC i Web API, proponuję przeczytać o minusach i zaletach, aby rozdzielić je jako różne projekty. Jedną bardzo ważną rzeczą (moją własną) są systemy uwierzytelniania, które są zupełnie inne.

Jeśli chcesz używać uwierzytelnionych żądań zarówno w MVC, jak i Web API, musisz pamiętać, że Web API jest RESTful (nie trzeba utrzymywać sesji, prostych żądań HTTP itp.), ale MVC nie.

Aby spojrzeć na różnice implementacji wystarczy utworzyć 2 różne projekty w Visual Studio 2013 z szablonów: jeden dla MVC i jeden dla Web API(Nie zapomnij włączyć "uwierzytelniania indywidualnego" podczas tworzenia). Zobaczysz wiele różnic w Authencationcontrollerach.

Więc bądź świadomy.

 15
Author: Yarkov Anton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:44

Powyższe rozwiązanie działa doskonale. Wolę wybrać opcję Web API podczas wybierania szablonu projektu, jak pokazano na poniższym obrazku

Uwaga: rozwiązanie działa z programem Visual Studio 2013 lub nowszym. Pierwotne pytanie zostało zadane w 2012 i jest to 2016, dlatego dodanie rozwiązania Visual Studio 2013 lub nowszego.

Szablon projektu pokazujący opcję web API

 2
Author: Sankar Krishnamoorthy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-07 08:55:33