IT박스

기존 MVC 웹 응용 프로그램에 웹 API를 추가 한 후 404 오류

itboxs 2020. 12. 4. 08:02
반응형

기존 MVC 웹 응용 프로그램에 웹 API를 추가 한 후 404 오류


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

불행히도 내 문제를 해결하는 데 충분하지 않았습니다. 나는 내가 잘못한 일이 없도록 두 번 시도했다. "Controllers"를 마우스 오른쪽 버튼으로 클릭하고 "Web API 2 Controller with actions, using Entity Framework"항목을 추가했습니다. 여기서 모델 클래스와 db 컨텍스트를 선택했습니다. 모든 것이 잘 진행되었지만 여전히 ... / api / Rest에 액세스하려고 할 때마다 404 오류가 발생했습니다 (내 컨트롤러 이름은 RestController입니다).


작동 중입니다 !!! 나는 믿고 싶지 않았지만 문제는 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);
}      

미친, 알아.


기존 MVC (5) 프로젝트 내에서 WebAPI를 사용하려면 다음 단계를 수행해야합니다.
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);
}

"새 경로를 추가 할 때 맨 위에 특정 경로를 추가하고 끝에 더 일반적인 경로를 추가해야한다는 점을 항상 염두에 두십시오. 그렇지 않으면 웹 앱이 적절한 경로를 수신하지 못할 것입니다."

위의 내용은 여기에서 인용 한 것입니다. http://www.codeproject.com/Tips/771809/Understanding-the-Routing-Framework-in-ASP-NET-MVC

I know the answer is already given, but this could help to understand why we need to put GlobalConfiguration.Configure(WebApiConfig.Register); before RouteConfig.RegisterRoutes(RouteTable.Routes);

참고URL : https://stackoverflow.com/questions/22401403/404-error-after-adding-web-api-to-an-existing-mvc-web-application

반응형