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


146

새 MVC (5) 프로젝트를 만들 때 웹 API 확인란을 선택 (프로젝트에 추가)하는 것을 잊었다 고 가정하면 웹 API를 추가하고 작동 시키려면 어떻게해야합니까?

많은 마이그레이션 질문이 있지만 MVC 5 프로젝트에 웹 API를 추가하기위한 완전한 최신 단계가없는 것으로 보이며 이전 답변 중 일부에서 변경된 것으로 보입니다.

MVC 4에 웹 API 추가

GlobalConfiguration.Configure (WebApiConfig.Register) MVC 4 추가

답변:


253

MVC 프로젝트 업데이트

Nuget 을 사용 하여 최신 웹 API를 얻으십시오.

프로젝트-마우스 오른쪽 버튼으로 클릭-Nuget 패키지 관리-웹 API (Microsoft ASP.NET 웹 API ...)를 검색하여 MVC 프로젝트에 설치하십시오.

그런 다음 여전히 웹 API 라우팅 이 작동해야합니다. Microsoft의 ASP.NET 웹 API 2 구성 에서

App_Start / 폴더에 WebApiConfig.cs 추가

using System.Web.Http;

namespace WebApplication1
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // TODO: Add any additional configuration code.

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

        // WebAPI when dealing with JSON & JavaScript!
        // Setup json serialization to serialize classes to camel (std. Json format)
        var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        formatter.SerializerSettings.ContractResolver =
            new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
        }
    }
}

MVC 프로젝트가있는 경우 Global.asax.cs가 되고 새 경로를 추가하십시오. Global.asax.cs 경로의 순서는 중요합니다. 사용하는 오래된 예가 있습니다. WebApiConfig.Register

이 행을 Global.asax.cs에 추가하십시오. GlobalConfiguration.Configure(WebApiConfig.Register);

protected void Application_Start()
{
    // Default stuff
    AreaRegistration.RegisterAllAreas();

    // Manually installed WebAPI 2.2 after making an MVC project.
    GlobalConfiguration.Configure(WebApiConfig.Register); // NEW way
    //WebApiConfig.Register(GlobalConfiguration.Configuration); // DEPRECATED

    // Default stuff
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

WebAPI 도움말

제 (얻으려면 매우 ) 도움이 WebAPI 도움말 페이지를 , WebAPI.HelpPage를 설치합니다. 기능에 대해서는 http://channel9.msdn.com/Events/Build/2014/3-644(~42 분)를 참조 하십시오 . 매우 도움이됩니다!

Nuget Console : Install-Package Microsoft.AspNet.WebApi.HelpPage

WebAPI가 작동하는지 확인하려면 다음을 수행하십시오.

컨트롤러 폴더-> 새 항목 추가-> 웹 API 컨트롤러 클래스로.

public class TestController : ApiController
{
    //public TestController() { }

    // GET api/<controller>
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }
    //...
}

이제 평소와 같이 IE / FF / Chrome 또는 비겟 테스트를위한 JavaScript 콘솔에서 테스트 할 수 있습니다.

(URL에 컨트롤러 만 있으면 새 웹 API 컨트롤러에서 GET () 액션을 호출 할 수 있습니다. REST (PUT / POST / GET / DELETE)에 따라 메소드 / 액션에 자동으로 매핑됩니다. MVC에서와 같이 조치에 의해) URL 직접 :

http://localhost:PORT/api/CONTROLLERNAME/

또는 jQuery를 사용하여 컨트롤러를 쿼리하십시오. 프로젝트를 실행하고 콘솔을 열고 (IE의 F12) Ajax 쿼리를 실행하십시오. (포트 및 컨트롤러 이름 확인)

$.get( "http://localhost:PORT/api/CONTROLLERNAME/", function( data ) {
    //$( ".result" ).html( data );
    alert( "Get data received:" + data);
});

참고 : 프로젝트에서 MVC와 Web API를 결합 할 때 고려해야 할 몇 가지 장단점이 있습니다

WebAPI 도움말 확인 : http://localhost:PORT/help


@Iko 난 당신이 코드에 쓴 모든 것을 다했지만 내가 그것을 실행할 때 오류가 발생했습니다. 그것은 나에게 오류를 제공
ninjaXnado

1
오류 메시지를 검색하십시오. 이러한 단계는 기본적으로 일반적인 경우에 필요한 단계였습니다.
lko

13
"Global.asax.cs 경로의 주문이 중요합니다"+1
Jim Aho

웹 API를 올바르게 추가했는지 테스트하는 방법을 이해할 수 없었습니까? 브라우저에 정확히 무엇을 써야합니까? 나는 썼지 http://localhost:12345/api/Get/5만 오류가 발생했습니다.
Jason Jason

3
WebApiConfig.Register (GlobalConfiguration.configuration)를 호출하는 "이전 방식"을 사용하고있었습니다. 더 이상 디버깅 할 수 없었습니다. 디버깅을 시작하고 컨트롤러 기능에 결코 도달하지 않습니다. "새 방식"GlobalConfiguration.Configure (WebApiConfig.Register)로 변경했습니다. 문제가 해결되었습니다.
D. Kermott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.