기존 ASP.NET MVC 4 웹 응용 프로그램 프로젝트에 웹 API를 추가하는 방법은 무엇입니까?


365

Visual Studio 2012에서 개발 된 ASP.NET MVC 4 웹 응용 프로그램 프로젝트에 ASP.NET 웹 API 를 추가하고 싶습니다. 프로젝트에 작동하는 웹 API를 추가하려면 어떤 단계를 수행해야합니까? 나는 ApiController에서 파생 된 컨트롤러가 필요하다는 것을 알고 있지만 그것이 내가 아는 전부입니다.

더 자세한 정보가 필요하면 알려주십시오.

답변:


455

수행해야 할 단계는 다음과 같습니다.

  1. 에 참조를 추가하십시오 System.Web.Http.WebHost.
  2. 추가하십시오 App_Start\WebApiConfig.cs(아래 코드 스 니펫 참조).
  3. System.Web.Http에서 네임 스페이스 를 가져옵니다 Global.asax.cs.
  4. 기본 웹 응용 프로그램 경로를 등록 하기 전에 (file )을 호출 WebApiConfig.Register(GlobalConfiguration.Configuration)하고 그렇지 않으면 우선합니다.MvcApplication.Application_Start()Global.asax.cs
  5. 에서 파생 된 컨트롤러를 추가하십시오 System.Web.Http.ApiController.

그런 다음 튜토리얼 (Your First ASP.NET Web API)에서 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);
}

2015 년 10 월 16 일 업데이트 :

위와 같이 작동하려면 NuGet 패키지 Microsoft.AspNet.WebApi가 설치되어 있어야합니다.


12
정말 도움이되었습니다. 참조도 추가해야 System.Net.Http했지만 그 외에도 매력처럼 작동했습니다!
— Christofer Eliasson

5
MVC3에서 4로 프로젝트를 업그레이드했으며 System.Web.Http에 대한 참조를 추가해야했습니다.
— Damien Sawyer

3
지금 너겟 (nuget)을 사용할 수 있으며, 발생하는 모든 변경 사항을 계속 파악할 수 있습니다! nuget.org/packages/Microsoft.AspNet.WebApi
— Chris

3
웹 API 레지스터를 다음과 같이 변경하기 전까지는 작동하지 않습니다. GlobalConfiguration.Configure (WebApiConfig.Register);
— KingOfHypocrites

3
@LuisGouveia 늦었을 것 같지만 이것이 내가 가진 것이라면 다른 사람이 더 빨리 해결할 것입니다. GlobalConfiguration.Configure (WebApiConfig.Register); Global.asax에서 RouteConfig.RegisterRoutes (RouteTable.Routes) 앞에갑니다.
— Maxim


70

내 MVC 5 프로젝트에 WebAPI를 추가합니다.

  1. NuGet 패키지 관리자 콘솔을 열고 실행

    PM> Install-Package Microsoft.AspNet.WebApi
  2. 참조 추가 System.Web.Routing, System.Web.Net그리고 System.Net.Http이미 DLL을하지 않을 경우이를

  3. 컨트롤러 폴더를 마우스 오른쪽 버튼으로 클릭하고 새 항목 추가> 웹> 웹 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>

차이점을 만든 것은 @kheya
— Rajat

내가 추가하고 싶습니다, 당신의 API를 컨트롤러의 이름으로 끝이 컨트롤러 와 같은 CarController (뿐만 아니라 자동차 )! 그래서 많은 사람들이 그것을 잊어 버리고 "{0}"이라는 컨트롤러와 일치하는 유형을 찾을 수 없습니다 "라는
— 얻었습니다

이 멋진 답변을보다 효율적으로 사용하려면 4, 8 및 9 단계를 무시할 수 있습니다 (그들은 필수는 아닙니다) 5 및 6 단계의 순서를 바꾸면 더 이해가됩니다 (클래스를 만드는 것이 좋습니다) 클래스를 사용하는 대신 그것을 사용하고 그것을 창조하십시오)
— Hakan Fıstık

System.Web.Routing, System.Web.Net 및 System.Net.Http에 대한 참조를 정확히 어디에 추가합니까?
— gabed123

28

controllers 폴더에 "WebApi Controller"를 추가하자마자 Visual Studio는 종속성을 자동으로 관리합니다.

Visual Studio는 ASP.NET Web API 2가 'MyTestProject'프로젝트에 대한 모든 종속성을 추가했습니다.

프로젝트의 Global.asax.cs 파일은 ASP.NET 웹 API를 사용하기 위해 추가 변경이 필요할 수 있습니다.

  1. 다음 네임 스페이스 참조를 추가하십시오.

    System.Web.Http 사용; System.Web.Routing 사용;

  2. 코드가 아직 Application_Start 메소드를 정의하지 않은 경우 다음 메소드를 추가하십시오.

    protected void Application_Start () {}

  3. Application_Start 메소드의 시작 부분에 다음 행을 추가하십시오.

    GlobalConfiguration.Configure (WebApiConfig.Register);


이것이 지금까지 이것을 달성하는 가장 쉬운 방법입니다.
— Adam Smith

1
여기서 작동하지 않습니다. 1. Nuget : Install-Package Microsoft.AspNet.WebApi2. 새 항목 "Web API Controller Class (v2.1)"를 추가하십시오. 결과 : API 컨트롤러를 추가하지만 변경하지는 않습니다 Application_Start. 오윈과 함께.
— Artyom

2
이것은 vs2015-업데이트 3을 가지고 웹 API 2 컨트롤러를 추가 할 때 정답입니다.
— ModChowdhury

2017 년에 이루어졌지만 WebApi 어셈블리를 업그레이드해야했습니다. 또한 수동으로 WebApiConfig 클래스 docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/…를 만들어야했습니다.
— johnny

22

아래 이미지와 같이 nuget에서 설치할 수 있습니다.

여기에 이미지 설명을 입력하십시오

또는 패키지 관리자 콘솔에서 아래 명령 줄을 실행하십시오.

Install-Package Microsoft.AspNet.WebApi

3
그렇다면 컨트롤러를 추가하는 것 외에는 어떻게해야합니까? 이것이 내가이 질문을 처음에 게시 한 이유입니다. 튜토리얼은 웹 API 프로젝트를 가정하기 때문에 실제로 말하지 않습니다. API 컨트롤러를 추가했지만 라우팅되지 않았습니다.
— aknuds1 1

1
튜토리얼은 기존 프로젝트에 웹 API를 추가하는 데 큰 도움이되지 않았으므로 대답에 요약 된대로 웹 API 프로젝트에서 알아 냈습니다.
— aknuds1 1

Web App 프로젝트 템플릿을 사용하는 경우이 배관이 이미 설치되어있는 것 같습니다.
— longda

@cuongle : 웹 API 버전 2.2가 mvc 4와 함께 설치됩니까? MVC 4를 지원합니까?
— 토마스

20

MVC와 Web API 프로젝트를 병합하기 전에 다른 프로젝트로 분리하는 단점과 장점 에 대해 읽어보십시오 . 매우 중요한 것 중 하나는 완전히 다른 인증 시스템입니다.

MVC와 Web API 모두에서 인증 된 요청을 사용해야하는 경우 웹 API는 RESTful (세션을 유지하지 않아도되고 간단한 HTTP 요청 등)을 기억해야하지만 MVC는 그렇지 않습니다.

구현의 차이점을 살펴 보려면 Visual Studio 2013에서 템플릿을 사용하여 MVC 용 프로젝트와 웹 API 용 프로젝트의 두 가지 프로젝트를 만들기 만하면됩니다 (생성하는 동안 "개별 인증"을 설정하는 것을 잊지 마십시오). AuthencationController에는 많은 차이가 있습니다.

그러니 조심하십시오.


11

참고 : 이것은 위의 답변 의 약어입니다.

  1. NuGet 패키지 관리자 콘솔을 열고 실행

    PM> Install-Package Microsoft.AspNet.WebApi
  2. 참조 추가 System.Web.Routing, System.Web.Net그리고 System.Net.Http이미 DLL을하지 않을 경우이를

  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_Startglobal.asax.cs 파일에없는 경우 메소드

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  5. 컨트롤러 폴더를 마우스 오른쪽 버튼으로 클릭하고 새 항목 추가> 웹> 웹 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";
            }  
        }
    }

System.Web.Routing, System.Web.Net 및 System.Net.Http에 대한 참조를 정확히 어디에 추가합니까?
— gabed123

1
참조 추가 대화 상자에서 해당 대화 상자를 열고 해당 어셈블리의 이름을 검색하면 해당 어셈블리가 이미 추가되어있을 가능성이 큽니다. (그러나 단지 확인합니다)
— 하칸 Fıstık

Application_Start 메소드는 Global.asax.cs에서 글로벌 클래스의 일부로 간주됩니까?
— gabed123

그렇습니다, 나는 당신이 그 메모에 대해
— Hakan Fıstık

1
@HakamFostok 도움이되었습니다. 감사합니다!
— csichar

3

위의 솔루션은 완벽하게 작동합니다. 아래 그림과 같이 프로젝트 템플릿을 선택할 때 웹 API 옵션을 선택하는 것을 선호합니다

참고 : 이 솔루션은 Visual Studio 2013 이상에서 작동합니다. 원래 질문은 2012 년에 요청되었으며 2016 년이므로 Visual Studio 2013 이상 솔루션을 추가합니다.

웹 API 옵션을 보여주는 프로젝트 템플릿


2
웹 API와 관련된 프로젝트를 작성하는 경우 웹 API 옵션을 선택하는 것이 더 쉽습니다. 이 옵션은 위의 회신에서 언급 한대로 필요한 모든 파일을 만듭니다.
— Sankar Krishnamoorthy

여기에 손 문제는 당신이 VS 2012 년 그 방법으로 그것을 할 수 없어, 비주얼 스튜디오 2012 년과 솔루션은 잘하지만 4 MVC
— netfed

이것은 좋은 지적이며 VS 2013에서 위의 솔루션을 시도했습니다. 지적 해 주셔서 감사합니다. @netfed.
— Sankar Krishnamoorthy

안녕하십니까, MVC 솔루션에서 API 요소가 작동하지만 기본적으로 솔루션을 API 솔루션으로 실행하려고했습니다. 그러나 기본적으로 MVC 솔루션으로 실행하고 API 위치 등으로 이동하면 API를 실행하십시오. 다른 사람 이이 문제를 겪고 해결할 수 있습니까? 감사합니다
— Chris Cooper

1

나는 같은 문제를 겪었다. 해결책은 너무 쉽다.

"Solotion 용 Nuget 패키지 관리"에서 solotion install Microsoft.ASP.NET.WebApi를 마우스 오른쪽 단추로 클릭하십시오.

붐 그게;)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.