ASP.NET MVC 4 릴리스 정보

이 문서에서는 ASP.NET MVC 4 릴리스에 대해 설명합니다.

설치 참고 사항

ASP.NET MVC 4 for Visual Studio 2010은 웹 플랫폼 설치 관리자를 사용하여 ASP.NET MVC 4 홈페이지 에서 설치할 수 있습니다.

ASP.NET MVC 4를 설치하기 전에 이전에 설치된 ASP.NET MVC 4 미리 보기를 제거하는 것이 좋습니다. ASP.NET MVC 4 베타 및 릴리스 후보를 제거하지 않고 ASP.NET MVC 4로 업그레이드할 수 있습니다.

이 릴리스는 .NET Framework 4.5의 미리 보기 릴리스와 호환되지 않습니다. ASP.NET MVC 4를 설치하기 전에 .NET Framework 4.5의 설치된 미리 보기 릴리스를 최종 버전으로 별도로 업그레이드해야 합니다.

ASP.NET MVC 4를 설치하고 ASP.NET MVC 3과 함께 실행할 수 있습니다.

설명서

ASP.NET MVC 문서는 다음 URL의 MSDN 웹사이트에서 제공됩니다.

https://go.microsoft.com/fwlink/?LinkID=243043

ASP.NET MVC에 대한 자습서 및 기타 정보는 ASP.NET 웹 사이트(https://www.asp.net/mvc/mvc4)의 MVC 4 페이지에서 확인할 수 있습니다.

지원

ASP.NET MVC 4는 완전히 지원됩니다. 이 릴리스 작업에 대한 질문이 있는 경우 ASP.NET 커뮤니티의 구성원이 비공식적인 지원을 제공할 수 있는 ASP.NET MVC 포럼(https://forums.asp.net/1146.aspx)에 게시할 수도 있습니다.

소프트웨어 요구 사항

Visual Studio용 ASP.NET MVC 4 구성 요소에는 PowerShell 2.0 및 서비스 팩 1이 있는 Visual Studio 2010 또는 서비스 팩 1이 있는 Visual Web Developer Express 2010이 필요합니다.

ASP.NET MVC 4의 새로운 기능

이 섹션에서는 ASP.NET MVC 4 릴리스에 도입된 기능에 대해 설명합니다.

ASP.NET Web API

ASP.NET MVC 4에는 브라우저 및 모바일 디바이스를 포함하여 광범위한 클라이언트에 도달할 수 있는 HTTP 서비스를 만들기 위한 새로운 프레임워크인 ASP.NET Web API 포함되어 있습니다. ASP.NET Web API RESTful 서비스를 빌드하기에 이상적인 플랫폼이기도 합니다.

ASP.NET Web API 다음 기능에 대한 지원을 포함합니다.

  • 최신 HTTP 프로그래밍 모델: 강력한 형식의 새 HTTP 개체 모델을 사용하여 웹 API에서 HTTP 요청 및 응답에 직접 액세스하고 조작합니다. 동일한 프로그래밍 모델 및 HTTP 파이프라인은 새 HttpClient 형식을 통해 클라이언트에서 대칭적으로 사용할 수 있습니다.
  • 경로에 대한 전체 지원: ASP.NET Web API 경로 매개 변수 및 제약 조건을 포함하여 ASP.NET 라우팅의 전체 경로 기능 집합을 지원합니다. 또한 간단한 규칙을 사용하여 작업을 HTTP 메서드에 매핑합니다.
  • 콘텐츠 협상: 클라이언트와 서버는 함께 작동하여 웹 API에서 반환되는 데이터에 적합한 형식을 결정할 수 있습니다. ASP.NET Web API XML, JSON 및 양식 URL로 인코딩된 형식에 대한 기본 지원을 제공하며 고유한 포맷터를 추가하여 이 지원을 확장하거나 기본 콘텐츠 협상 전략을 대체할 수도 있습니다.
  • 모델 바인딩 및 유효성 검사: 모델 바인더는 HTTP 요청의 다양한 부분에서 데이터를 추출하고 해당 메시지 부분을 Web API 작업에서 사용할 수 있는 .NET 개체로 변환하는 쉬운 방법을 제공합니다. 유효성 검사는 데이터 주석을 기반으로 작업 매개 변수에 대해서도 수행됩니다.
  • 필터: ASP.NET Web API [Authorize] 특성과 같은 잘 알려진 필터를 포함한 필터를 지원합니다. 작업, 권한 부여 및 예외 처리에 대한 사용자 고유의 필터를 작성하고 연결할 수 있습니다.
  • 쿼리 컴퍼지션: OData 쿼리 규칙을 통해 웹 API 쿼리를 지원할 수 있도록 IQueryable을 반환하는 작업에 [Queryable] 필터 특성을 사용합니다.
  • 향상된 테스트 용이성: 정적 컨텍스트 개체에서 HTTP 세부 정보를 설정하는 대신 웹 API 작업은 HttpRequestMessageHttpResponseMessage 인스턴스에서 작동합니다. Web API 프로젝트와 함께 단위 테스트 프로젝트를 만들어 Web API 기능에 대한 단위 테스트 작성을 빠르게 시작합니다.
  • 코드 기반 구성: ASP.NET Web API 구성은 코드를 통해서만 수행되며 구성 파일은 클린. 제공된 서비스 로케이터 패턴을 사용하여 확장성 지점을 구성합니다.
  • IoC(Inversion of Control) 컨테이너에 대한 향상된 지원: ASP.NET Web API 향상된 종속성 확인자 추상화로 IoC 컨테이너를 크게 지원합니다.
  • 자체 호스트: 웹 API는 IIS 외에도 자체 프로세스에서 호스트할 수 있으며, 웹 API의 전체 경로 및 기타 기능을 계속 사용할 수 있습니다.
  • 사용자 지정 도움말 및 테스트 페이지를 만듭니다. 이제 새 IApiExplorer 서비스를 사용하여 웹 API에 대한 사용자 지정 도움말 및 테스트 페이지를 쉽게 빌드하여 웹 API에 대한 전체 런타임 설명을 가져올 수 있습니다.
  • 모니터링 및 진단: 이제 ASP.NET Web API System.Diagnostics, ETW 및 타사 로깅 프레임워크와 같은 기존 로깅 솔루션과 쉽게 통합할 수 있는 경량 추적 인프라를 제공합니다. ITraceWriter 구현을 제공하고 웹 API 구성에 추가하여 추적을 사용하도록 설정할 수 있습니다.
  • 링크 생성: ASP.NET Web API UrlHelper를 사용하여 동일한 애플리케이션의 관련 리소스에 대한 링크를 생성합니다.
  • Web API 프로젝트 템플릿: 새 Web API 프로젝트 형식의 새 MVC 4 프로젝트 마법사를 선택하여 ASP.NET Web API 빠르게 시작하고 실행합니다.
  • 비 계:컨트롤러 추가 대화 상자를 사용하여 Entity Framework 기반 모델 형식에 따라 웹 API 컨트롤러를 빠르게 스캐폴드합니다.

ASP.NET Web API 대한 자세한 내용은 을 참조https://www.asp.net/web-api하세요.

기본 프로젝트 템플릿의 향상된 기능

새로운 ASP.NET MVC 4 프로젝트를 만드는 데 사용되는 템플릿이 최신 웹 사이트를 만들기 위해 업데이트되었습니다.

새 프로젝트 템플릿 페이지의 브라우저 보기 스크린샷

외관 개선 외에도 새 템플릿의 기능이 향상되었습니다. 템플릿은 적응형 렌더링이라는 기술을 사용하여 사용자 지정 없이 데스크톱 브라우저와 모바일 브라우저 모두에서 멋지게 보입니다.

새 프로젝트 템플릿 페이지의 데스크톱 버전의 모바일 브라우저 보기 스크린샷

적응형 렌더링이 작동하는 것을 보려면 모바일 에뮬레이터를 사용하거나 데스크톱 브라우저 창의 크기를 더 작게 조정해 볼 수 있습니다. 브라우저 창이 충분히 작아지면 페이지의 레이아웃이 변경됩니다.

모바일 프로젝트 템플릿

새 프로젝트를 시작하고 모바일 및 태블릿 브라우저용 사이트를 특별히 만들려는 경우 새 모바일 애플리케이션 프로젝트 템플릿을 사용할 수 있습니다. 이는 터치 최적화 UI를 빌드하기 위한 오픈 소스 라이브러리인 jQuery Mobile을 기반으로 합니다.

모바일 애플리케이션 프로젝트 템플릿의 모바일 브라우저 보기 스크린샷

이 템플릿은 인터넷 애플리케이션 템플릿과 동일한 애플리케이션 구조를 포함하지만(컨트롤러 코드는 거의 동일함) 터치 기반 모바일 디바이스에서 잘 보이고 잘 작동하도록 jQuery Mobile을 사용하여 스타일이 지정됩니다. 모바일 UI를 구조화하고 스타일을 지정하는 방법에 대한 자세한 내용은 jQuery Mobile 프로젝트 웹 사이트를 참조하세요.

모바일 최적화 보기를 추가하려는 데스크톱 지향 사이트가 이미 있거나 데스크톱 및 모바일 브라우저에 다르게 스타일이 지정된 보기를 제공하는 단일 사이트를 만들려는 경우 새 디스플레이 모드 기능을 사용할 수 있습니다. (다음 섹션을 참조하세요.)

디스플레이 모드

새 디스플레이 모드 기능을 사용하면 애플리케이션이 요청을 만드는 브라우저에 따라 보기를 선택할 수 있습니다. 예를 들어 데스크톱 브라우저가 홈 페이지를 요청하는 경우 애플리케이션은 Views\Home\Index.cshtml 템플릿을 사용할 수 있습니다. 모바일 브라우저가 홈 페이지를 요청하는 경우 애플리케이션은 Views\Home\Index.mobile.cshtml 템플릿을 반환할 수 있습니다.

레이아웃 및 부분도 특정 브라우저 유형에 대해 재정의할 수 있습니다. 예:

  • Views\Shared 폴더에 _Layout.cshtml 및 _Layout.mobile.cshtml 템플릿이 모두 포함된 경우 기본적으로 애플리케이션은 모바일 브라우저의 요청 중에 _Layout.mobile.cshtml을 사용하고 다른 요청 중에는 _Layout.cshtml을 사용합니다.
  • 폴더에 _MyPartial.cshtml과 _MyPartial.mobile.cshtml @Html.Partial(이 모두 포함된 경우 명령 "_MyPartial")은 모바일 브라우저의 요청 중에 _MyPartial.mobile.cshtml을 렌더링하고 다른 요청 중에는 _MyPartial.cshtml을 렌더링합니다.

다른 디바이스에 대해 보다 구체적인 보기, 레이아웃 또는 부분 보기를 만들려면 새 DefaultDisplayMode instance 등록하여 요청이 특정 조건을 충족할 때 검색할 이름을 지정할 수 있습니다. 예를 들어 Global.asax 파일의 Application_Start 메서드에 다음 코드를 추가하여 Apple iPhone 브라우저가 요청할 때 적용되는 표시 모드로 문자열 "iPhone"을 등록할 수 있습니다.

DisplayModeProvider.Instance.Modes.Insert(0, new
DefaultDisplayMode("iPhone")
{
    ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf
        ("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
});

이 코드가 실행되면 Apple iPhone 브라우저가 요청을 하면 애플리케이션에서 Views\Shared\_Layout.iPhone.cshtml 레이아웃(있는 경우)을 사용합니다. 디스플레이 모드에 대한 자세한 내용은 MVC 4 모바일 기능 ASP.NET 참조하세요. DisplayModeProvider를 사용하는 애플리케이션은 Fixed DisplayModes NuGet 패키지를 설치해야 합니다. ASP.NET 2012년 가을 업데이트에는 새 프로젝트 템플릿에 Fixed DisplayModes NuGet 패키지가 포함되어 있습니다. 수정에 대한 자세한 내용은 ASP.NET MVC 4 모바일 캐싱 버그 수정됨 을 참조하세요.

jQuery Mobile 및 모바일 기능

jQuery Mobile을 사용하여 ASP.NET MVC 4를 사용하여 모바일 애플리케이션을 빌드하는 방법에 대한 자세한 내용은 MVC 4 모바일 기능 ASP.NET 자습서를 참조하세요.

비동기 컨트롤러에 대한 작업 지원

이제 Task 또는 <Task ActionResult> 형식의 개체를 반환하는 단일 메서드로 비동기 작업 메서드를 작성할 수 있습니다.

자세한 내용은 ASP.NET MVC 4에서 비동기 메서드 사용을 참조하세요.

Azure SDK

ASP.NET MVC 4는 Windows Azure SDK의 1.6 이상 릴리스를 지원합니다.

데이터베이스 마이그레이션

ASP.NET MVC 4 프로젝트에는 이제 Entity Framework 5가 포함됩니다. Entity Framework 5의 뛰어난 기능 중 하나는 데이터베이스 마이그레이션을 지원하는 것입니다. 이 기능을 사용하면 데이터베이스의 데이터를 유지하면서 코드 중심 마이그레이션을 사용하여 데이터베이스 스키마를 쉽게 발전할 수 있습니다. 데이터베이스 마이그레이션에 대한 자세한 내용은 MVC 4 ASP.NET 소개 자습서에서 영화 모델 및 테이블에 새 필드 추가를 참조하세요.

빈 프로젝트 템플릿

이제 완전히 클린 슬레이트에서 시작할 수 있도록 MVC 빈 프로젝트 템플릿이 실제로 비어 있습니다. 이전 버전의 빈 프로젝트 템플릿의 이름이 Basic으로 변경되었습니다.

모든 프로젝트 폴더에 컨트롤러 추가

이제 마우스 오른쪽 단추를 클릭하고 MVC 프로젝트의 모든 폴더에서 컨트롤러 추가 를 선택할 수 있습니다. 이렇게 하면 MVC 및 Web API 컨트롤러를 별도의 폴더에 유지하는 등 원하는 대로 컨트롤러를 유연하게 구성할 수 있습니다.

묶음 및 축소

번들링 및 축소 프레임워크를 사용하면 개별 파일을 스크립트 및 CSS용 번들로 묶은 단일 파일로 결합하여 웹 페이지에서 수행해야 하는 HTTP 요청 수를 줄일 수 있습니다. 그런 다음 번들의 콘텐츠를 축소하여 해당 요청의 전체 크기를 줄일 수 있습니다. 축소에는 공백을 제거하여 변수 이름을 축소하여 의미 체계에 따라 CSS 선택기를 축소하는 등의 작업이 포함될 수 있습니다. 번들은 코드에서 선언되고 구성되며, 번들에 대한 단일 링크를 생성하거나 디버깅할 때 번들의 개별 콘텐츠에 대한 여러 링크를 생성할 수 있는 도우미 메서드를 통해 보기에서 쉽게 참조됩니다. 자세한 내용은 번들링 및 축소를 참조하세요.

OAuth 및 OpenID를 사용하여 Facebook 및 기타 사이트에서 로그인 사용

ASP.NET MVC 4 인터넷 프로젝트 템플릿의 기본 템플릿에는 이제 DotNetOpenAuth 라이브러리를 사용하는 OAuth 및 OpenID 로그인에 대한 지원이 포함됩니다. OAuth 또는 OpenID 공급자를 구성하는 방법에 대한 자세한 내용은 WebForms, MVC 및 WebPages에 대한 OAuth/OpenID 지원 및ASP.NET 웹 페이지 OAuth 및 OpenID 기능 설명서를 참조하세요.

ASP.NET MVC 3 프로젝트를 ASP.NET MVC 4로 업그레이드

ASP.NET MVC 4는 동일한 컴퓨터에 ASP.NET MVC 3과 나란히 설치할 수 있으므로 ASP.NET MVC 3 애플리케이션을 ASP.NET MVC 4로 업그레이드할 시기를 유연하게 선택할 수 있습니다.

업그레이드하는 가장 간단한 방법은 새 ASP.NET MVC 4 프로젝트를 만들고 기존 MVC 3 프로젝트의 모든 보기, 컨트롤러, 코드 및 콘텐츠 파일을 새 프로젝트로 복사한 다음 사용 중인 MVC가 아닌 템플릿에 포함된 assembiles와 일치하도록 새 프로젝트의 어셈블리 참조를 업데이트하는 것입니다. MVC 3 프로젝트에서 Web.config 파일을 변경한 경우 이러한 변경 내용도 MVC 4 프로젝트의 Web.config 파일에 병합해야 합니다.

기존 ASP.NET MVC 3 애플리케이션을 버전 4로 수동으로 업그레이드하려면 다음을 수행합니다.

  1. 프로젝트의 모든 Web.config 파일(프로젝트의 루트에 하나, Views 폴더에 하나씩, 프로젝트의 각 영역에 대해 Views 폴더에 하나씩 있음)에서 다음 텍스트의 모든 instance 바꿉니다(참고: System.Web.WebPages, Version=1.0.0.0은 Visual Studio 2012로 만든 프로젝트에서 찾을 수 없음).

    System.Web.Mvc, Version=3.0.0.0
    System.Web.WebPages, Version=1.0.0.0
    System.Web.Helpers, Version=1.0.0.0
    System.Web.WebPages.Razor, Version=1.0.0.0
    

    다음 해당 텍스트로 다음을 수행합니다.

    System.Web.Mvc, Version=4.0.0.0
    System.Web.WebPages, Version=2.0.0.0
    System.Web.Helpers, Version=2.0.0.0
    System.Web.WebPages.Razor, Version=2.0.0.0
    
  2. 루트 Web.config 파일에서 webPages:Version 요소를 "2.0.0.0"으로 업데이트하고 값이 "true"인 새 PreserveLoginUrl 키를 추가합니다.

    <appSettings>
      <add key="webpages:Version" value="2.0.0.0" />
      <add key="PreserveLoginUrl" value="true" />
    </appSettings>
    
  3. 솔루션 탐색기 참조를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 선택합니다. 왼쪽 창에서 Online\NuGet 공식 패키지 원본을 선택한 다음, 다음을 업데이트합니다.

    • ASP.NET MVC 4
    • (선택 사항) jQuery, jQuery 유효성 검사 및 jQuery UI
    • (선택 사항) Entity Framework
    • (Optonal) Modernizr
  4. 솔루션 탐색기 프로젝트 이름을 마우스 오른쪽 단추로 클릭한 다음 프로젝트 언로드를 선택합니다. 그런 다음 이름을 다시 마우스 오른쪽 단추 로 클릭하고 ProjectName.csproj 편집을 선택합니다.

  5. ProjectTypeGuids 요소를 찾아 {E53F8FEA-EAE0-44A6-8774-FFD645390401}을 {E3E379DF-F4C6-4180-9B81-6769533ABE47}으로 바꿉니다.

  6. 변경 내용을 저장하고 편집 중인 프로젝트(.csproj) 파일을 닫고 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 프로젝트 다시 로드를 선택합니다.

  7. 프로젝트에서 이전 버전의 ASP.NET MVC를 사용하여 컴파일된 타사 라이브러리를 참조하는 경우 루트 Web.config 파일을 열고 구성 섹션 아래에 다음 세 개의 bindingRedirect 요소를 추가합니다.

    <configuration>
      <!--... elements deleted for clarity ...-->
     
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Helpers" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages" 
                 publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    

ASP.NET MVC 4 릴리스 후보의 변경 내용

ASP.NET MVC 4 릴리스 후보 릴리스 정보는 여기에서 찾을 수 있습니다.

이 릴리스의 ASP.NET MVC 4 릴리스 후보의 주요 변경 내용은 아래에 요약되어 있습니다.

  • 컨트롤러별 구성: ASP.NET Web API 컨트롤러는 자체 포맷터, 작업 선택기 및 매개 변수 바인더를 설정하기 위해 IControllerConfiguration을 구현하는 사용자 지정 특성으로 특성을 지정할 수 있습니다. HttpControllerConfigurationAttribute가 제거되었습니다.
  • 경로별 메시지 처리기: 이제 지정된 경로에 대한 요청 체인에서 최종 메시지 처리기를 지정할 수 있습니다. 이렇게 하면 자체(비 IHttpController) 엔드포인트로 디스패치하기 위해 라우팅을 사용하는 승차 프레임워크를 지원할 수 있습니다.
  • 진행률 알림:ProgressMessageHandler 는 업로드 중인 요청 엔터티와 다운로드 중인 응답 엔터티 모두에 대한 진행률 알림을 생성합니다. 이 처리기를 사용하면 요청 본문을 업로드하거나 응답 본문을 다운로드하는 정도를 추적할 수 있습니다.
  • 콘텐츠 푸시:PushStreamContent 클래스를 사용하면 데이터 생산자가 스트림을 사용하여 요청 또는 응답(동기 또는 비동기식)에 직접 쓰려는 시나리오를 사용할 수 있습니다. PushStreamContent가 데이터를 수락할 준비가 되면 출력 스트림을 사용하여 작업 대리자를 호출합니다. 그런 다음 개발자는 필요한 기간 동안 스트림에 쓰고 쓰기가 완료되면 스트림을 닫을 수 있습니다. PushStreamContent는 스트림의 닫기를 감지하고 콘텐츠를 작성하기 위한 기본 비동기 작업을 완료합니다.
  • 오류 응답 만들기: HttpError 형식을 사용하여 IncludeErrorDetailPolicy를 계속 적용하면서 유효성 검사 오류 및 예외와 같은 오류 정보를 일관되게 나타냅니다.CreateErrorResponse 확장 메서드를 사용하여 HttpError 를 콘텐츠로 사용하여 오류 응답을 쉽게 만들 수 있습니다. HttpError 콘텐츠는 완전히 협상된 콘텐츠입니다.
  • MediaRangeMapping이 제거됨: 미디어 형식 범위는 이제 기본 콘텐츠 협상가에 의해 처리됩니다.
  • 단순 형식 매개 변수에 대한 기본 매개 변수 바인딩은 이제 [FromUri]입니다. 이전 릴리스에서는 모델 바인딩을 사용한 단순 형식 매개 변수에 대한 기본 매개 변수 바인딩을 ASP.NET Web API. 단순 형식 매개 변수에 대한 기본 매개 변수 바인딩은 이제 [FromUri]입니다.
  • 작업 선택에서 필요한 매개 변수를 적용합니다. 이제 ASP.NET Web API 작업 선택은 URI에서 제공되는 모든 필수 매개 변수가 제공되는 경우에만 작업을 선택합니다. 매개 변수는 작업 메서드 서명에서 인수에 대한 기본값을 제공하여 선택 사항으로 지정할 수 있습니다.
  • HTTP 매개 변수 바인딩 사용자 지정:ParameterBindingAttribute를 사용하여 특정 작업 매개 변수에 대한 매개 변수 바인딩을 사용자 지정하거나 HttpConfiguration에서 ParameterBindingRules를 사용하여 매개 변수 바인딩을 보다 광범위하게 사용자 지정합니다.
  • MediaTypeFormatter 개선 사항: 포맷터는 이제 전체 HttpContent instance 액세스할 수 있습니다.
  • 호스트 버퍼링 정책 선택: 호스트가 버퍼링을 사용할 시기를 결정할 수 있도록 ASP.NET Web API IHostBufferPolicySelector 서비스를 구현하고 구성합니다.
  • 호스트에 구애받지 않은 방식으로 클라이언트 인증서에 액세스합니다 . GetClientCertificate 확장 메서드를 사용하여 요청 메시지에서 제공된 클라이언트 인증서를 가져옵니다.
  • 콘텐츠 협상 확장성:DefaultContentNegotiator 에서 파생되고 원하는 콘텐츠 협상의 모든 측면을 재정의하여 콘텐츠 협상을 사용자 지정합니다.
  • 406 허용되지 않는 응답 반환 지원: 이제 excludeMatchOnTypeOnly 매개 변수가 true로 설정된 DefaultContentNegotiator를 만들어 적절한 포맷터를 찾을 수 없는 경우 ASP.NET Web API 406 허용 안 됨 응답을 반환할 수 있습니다.
  • 양식 데이터를 NameValueCollection 또는 JToken으로 읽습니다. 각각 ParseQueryStringReadAsFormDataAsync 확장 메서드를 사용하여 URI 쿼리 문자열 또는 요청 본문에서 NameValueCollection으로 양식 데이터를 읽을 수 있습니다. 마찬가지로 TryReadQueryAsJsonReadAsync<T> 확장 메서드를 각각 사용하여 URI 쿼리 문자열 또는 요청 본문에서 JToken으로 양식 데이터를 읽을 수 있습니다.
  • 다중 파트 개선 사항: 이제 사용자에게 최적의 방법으로 결과를 읽고 표시할 수 있는 MIME 다중 파트 데이터 형식에 완전히 맞게 조정된 MultipartStreamProvider 를 작성할 수 있습니다. 구현이 MIME 다중 파트 본문 파트에서 원하는 후 처리를 수행할 수 있도록 MultipartStreamProvider 에 사후 처리 단계를 후크할 수도 있습니다. 예를 들어 MultipartFormDataStreamProvider 구현은 HTML 양식 데이터 파트를 읽고 호출자에서 쉽게 가져올 수 있도록 NameValueCollection 에 추가합니다.
  • 링크 생성 개선 사항:UrlHelper 는 더 이상 HttpControllerContext에 의존하지 않습니다. 이제 HttpRequestMessage를 사용할 수 있는 모든 컨텍스트에서 UrlHelper에 액세스할 수 있습니다.
  • 메시지 처리기 실행 순서 변경: 이제 메시지 처리기가 역순이 아닌 구성된 순서대로 실행됩니다.
  • 메시지 처리기를 연결하기 위한 도우미:DelegatingHandlers를 연결하고 원하는 파이프라인을 준비하여 HttpClient를 만들 수 있는 새 HttpClientFactory입니다. 또한 대체 내부 처리기(기본값은 HttpClientHandler)와 연결하기 위한 기능을 제공할 뿐만 아니라 HttpClient 대신 HttpMessageInvoker 또는 다른 DelegatingHandler를 상위 호출자로 사용할 때 배선을 작동합니다.
  • ASP.NET 웹 최적화의 CDN 지원: ASP.NET 웹 최적화는 이제 CDN 대체 경로를 지원하므로 각 번들에 대해 콘텐츠 배달 네트워크에서 동일한 리소스를 가리키는 추가 URL을 지정할 수 있습니다. CDN을 지원하면 스크립트 및 스타일 번들을 웹 애플리케이션의 최종 소비자에게 지리적으로 더 가깝게 설정할 수 있습니다. 프로덕션 앱은 CDN을 사용할 수 없는 경우 대체를 구현해야 합니다. 대체를 테스트합니다.
  • ASP.NET Web API 경로 및 구성이 WebApiConfig.Register 정적 메서드로 이동하여 테스트 코드에서 다시 사용할 수 있습니다. ASP.NET Web API 경로는 이전에 표준 MVC 경로와 함께 RouteConfig.RegisterRoutes에 추가되었습니다. 이제 기본 ASP.NET Web API 경로 및 구성이 테스트를 용이하게 하기 위해 별도의 WebApiConfig.Register 메서드에서 처리됩니다.

알려진 문제 및 호환성이 손상되는 변경

  • 모바일 보기를 반환해야 할 때 RC 및 RTM 버전의 ASP.NET MVC 4가 캐시된 데스크톱 보기를 잘못 반환했습니다.

  • Razor 뷰 엔진의 호환성이 손상되는 변경 System.Web.Mvc.Razor에서 다음 형식이 제거되었습니다.

    • ModelSpan
    • MvcVBRazorCodeGenerator
    • MvcCSharpRazorCodeGenerator
    • MvcVBRazorCodeParser

    다음 메서드도 제거되었습니다.

    • MvcCSharpRazorCodeParser.ParseInheritsStatement(System.Web.Razor.Parser.CodeBlockInfo)
    • MvcWebPageRazorHost.DecorateCodeGenerator(System.Web.Razor.Generator.RazorCodeGenerator)
    • MvcVBRazorCodeParser.ParseInheritsStatement(System.Web.Razor.Parser.CodeBlockInfo)
  • WebMatrix.WebData.dll ASP.NET MVC 4 앱의 /bin 디렉터리에 포함되면 양식 인증에 대한 URL을 인수합니다. 애플리케이션에 WebMatrix.WebData.dll 어셈블리를 추가합니다(예: 배포 가능한 종속성 추가 대화 상자를 사용할 때 "Razor 구문으로 ASP.NET 웹 페이지"을 선택하여)는 기본 ASP.NET MVC 계정 컨트롤러에서 예상한 대로 /account/login이 아닌 /account/logon으로 인증 로그인 리디렉션을 재정의합니다. 이 동작을 방지하고 web.config 인증 섹션에 이미 지정된 URL을 사용하려면 PreserveLoginUrl이라는 appSetting을 추가하고 true로 설정할 수 있습니다.

    <appSettings>
        <add key="PreserveLoginUrl" value="true"/>
    </appSettings>
    
  • Visual Studio 2010 및 Visual Web Developer 2010의 병렬 설치를 위해 ASP.NET MVC 4를 설치하려고 하면 NuGet 패키지 관리자가 설치되지 않습니다. Visual Studio 2010 및 Visual Web Developer 2010을 ASP.NET MVC 4와 나란히 실행하려면 두 버전의 Visual Studio가 이미 설치된 후 ASP.NET MVC 4를 설치해야 합니다.

  • 필수 구성 요소가 이미 제거된 경우 MVC 4에 ASP.NET 제거가 실패합니다. ASP.NET MVC 4를 완전히 제거하려면 Visual Studio를 제거하기 전에 ASP.NET MVC 4를 제거해야 합니다.

  • ASP.NET MVC 4를 설치하면 MVC 3 RTM 애플리케이션에 ASP.NET 중단됩니다. RTM 릴리스로 만든 MVC 3 애플리케이션을 ASP.NET( ASP.NET MVC 3 도구 업데이트 릴리스가 아님) ASP.NET MVC 4와 함께 작동하려면 다음 변경 내용이 필요합니다. 이러한 업데이트를 수행하지 않고 프로젝트를 빌드하면 컴파일 오류가 발생합니다.

    필수 업데이트

    1. 루트 Web.config 파일에서 webPages:Version 키와 값 1.0.0.0을 사용하여 새 <appSettings> 항목을 추가합니다.

      <appSettings>
          <add key="webpages:Version" value="1.0.0.0"/>
          <add key="ClientValidationEnabled" value="true"/>
          <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
      </appSettings>
      
    2. 솔루션 탐색기 프로젝트 이름을 마우스 오른쪽 단추로 클릭한 다음 프로젝트 언로드를 선택합니다. 그런 다음, 이름을 다시 마우스 오른쪽 단추로 클릭하고 ProjectName.csproj 편집을 선택합니다.

    3. 다음 어셈블리 참조를 찾습니다.

      <Reference Include="System.Web.WebPages"/> 
      <Reference Include="System.Web.Helpers" />
      

      다음으로 바꿉다.

      <Reference Include="System.Web.WebPages, Version=1.0.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL "/> 
      <Reference Include="System.Web.Helpers, Version=1.0.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
      
    4. 변경 내용을 저장하고 편집 중인 프로젝트(.csproj) 파일을 닫은 다음 프로젝트를 마우스 오른쪽 단추로 클릭하고 다시 로드를 선택합니다.

  • ASP.NET MVC 4 프로젝트를 4.5에서 대상 4.0으로 변경해도 EntityFramework 어셈블리 참조는 업데이트되지 않습니다 . 4.5를 대상으로 지정한 후 ASP.NET MVC 4 프로젝트를 대상 4.0으로 변경하는 경우 EntityFramework 어셈블리에 대한 참조는 여전히 4.5 버전을 가리킵니다. 이 문제를 해결하려면 EntityFramework NuGet 패키지를 제거하고 다시 설치합니다.

  • 403 대상 4.0에서 4.5로 변경한 후 Azure에서 ASP.NET MVC 4 애플리케이션을 실행하는 경우 사용할 수 없음: 4.5를 대상으로 한 후 ASP.NET MVC 4 프로젝트를 대상 4.0으로 변경한 다음 Azure에 배포하면 런타임에 403 사용할 수 없음 오류가 표시 될 수 있습니다. 이 문제를 해결하려면 web.config 다음을 추가합니다. <modules runAllManagedModulesForAllRequests="true" />

  • Razor 파일의 문자열 리터럴에 ''를 입력하면 Visual Studio 2012가 충돌합니다. 이 문제를 해결하려면 문자열 리터럴의 닫는 따옴표를 먼저 입력합니다.

  • 인터넷 템플릿에서 "계정/관리"로 이동하여 CHS, TRK 및 CHT 언어에 대한 런타임 오류가 발생합니다. 이 문제를 해결하려면 강력한> 태그 내에< 유일한 콘텐츠로 배치하여 @User.Identity.Name 구분하도록 페이지를 수정합니다.

  • Google 및 LinkedIn 공급자는 Azure 웹 사이트 내에서 지원되지 않습니다. Azure 웹 사이트에 배포할 때 대체 인증 공급자를 사용합니다.

  • IIS 8 Express/IIS에서 UriPathExtensionMapping을 사용하는 경우 확장을 사용하려고 할 때 404 찾을 수 없음 오류가 발생합니다. 정적 파일 처리기는 UriPathExtensionMappings를 사용하는 웹 API에 대한 요청을 방해합니다. web.config runAllManagedModulesForAllRequests=true 를 설정하여 문제를 해결합니다.

  • Controller.Execute 메서드가 더 이상 호출되지 않습니다. 이제 모든 MVC 컨트롤러가 항상 비동기적으로 실행됩니다.