기존 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.