notatki o wydaniu ASP.NET MVC 4

W tym dokumencie opisano wydanie ASP.NET MVC 4 .

Uwagi dotyczące instalacji

ASP.NET MVC 4 dla programu Visual Studio 2010 można zainstalować ze strony głównej ASP.NET MVC 4 przy użyciu Instalatora platformy internetowej.

Zalecamy odinstalowanie poprzednio zainstalowanych wersji zapoznawczych ASP.NET MVC 4 przed zainstalowaniem ASP.NET MVC 4. Możesz uaktualnić ASP.NET MVC 4 Beta i Release Candidate do ASP.NET MVC 4 bez odinstalowywania.

Ta wersja nie jest zgodna z żadnymi wersjami wersji zapoznawczej programu .NET Framework 4.5. Należy oddzielnie uaktualnić wszystkie zainstalowane wersje zapoznawcza programu .NET Framework 4.5 do wersji ostatecznej przed zainstalowaniem ASP.NET MVC 4.

ASP.NET MVC 4 można zainstalować i uruchomić równolegle z ASP.NET MVC 3.

Dokumentacja

Dokumentacja ASP.NET MVC jest dostępna w witrynie sieci Web MSDN pod następującym adresem URL:

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

Samouczki i inne informacje o ASP.NET MVC są dostępne na stronie MVC 4 witryny internetowej ASP.NET (https://www.asp.net/mvc/mvc4).

Support

ASP.NET MVC 4 jest w pełni obsługiwany. Jeśli masz pytania dotyczące pracy z tą wersją, możesz również opublikować je na forum ASP.NET MVC (https://forums.asp.net/1146.aspx), w którym członkowie społeczności ASP.NET często mogą zapewnić nieformalną pomoc techniczną.

Wymagania dotyczące oprogramowania

Składniki ASP.NET MVC 4 dla programu Visual Studio wymagają programu PowerShell 2.0 i programu Visual Studio 2010 z dodatkiem Service Pack 1 lub Visual Web Developer Express 2010 z dodatkiem Service Pack 1.

Nowe funkcje w ASP.NET MVC 4

W tej sekcji opisano funkcje wprowadzone w wersji ASP.NET MVC 4.

ASP.NET Web API

ASP.NET MVC 4 zawiera ASP.NET Web API, nowy framework do tworzenia usług HTTP, które mogą dotrzeć do wielu rodzajów klientów, w tym przeglądarek i urządzeń mobilnych. ASP.NET internetowy interfejs API jest również idealną platformą do tworzenia usług RESTful.

ASP.NET internetowy interfejs API obejmuje obsługę następujących funkcji:

  • Nowoczesny model programowania HTTP: Bezpośredni dostęp i manipulowanie żądaniami HTTP i odpowiedziami w internetowych interfejsach API przy użyciu nowego, silnie typizowanego modelu obiektów HTTP. Ten sam model programowania i potok HTTP są symetrycznie dostępne na kliencie za pośrednictwem nowego typu HttpClient .
  • Pełna obsługa tras: ASP.NET Web API obsługuje pełny zestaw możliwości routingu ASP.NET, w tym parametry trasy i ograniczenia. Ponadto użyj prostych konwencji do mapowania akcji na metody HTTP.
  • Negocjowanie zawartości: Klient i serwer mogą współpracować, aby określić odpowiedni format danych zwracanych z internetowego interfejsu API. ASP.NET Web API zapewnia domyślną obsługę formatów XML, JSON i formularzy kodowanych jako URL, a tę obsługę można rozszerzyć, dodając własne formatery lub nawet zastępując domyślną strategię negocjacji zawartości.
  • Powiązanie i walidacja modelu: Powiązania modelu umożliwiają łatwe wyodrębnianie danych z różnych części żądania HTTP i konwertowanie tych części komunikatów na obiekty platformy .NET, które mogą być używane przez akcje internetowego interfejsu API. Walidacja jest również wykonywana na parametrach akcji, bazując na adnotacjach danych.
  • Filtry: API internetowe ASP.NET obsługuje filtry, w tym dobrze znane, takie jak atrybut [Authorize]. Możesz tworzyć i podłączać własne filtry do akcji, autoryzacji i obsługi wyjątków.
  • Kompozycja zapytania: Użyj atrybutu filtru [Queryable] dla akcji zwracającej funkcję IQueryable , aby umożliwić obsługę wykonywania zapytań względem internetowego interfejsu API za pośrednictwem konwencji zapytań OData.
  • Ulepszona możliwość testowania: Zamiast ustawiać szczegóły HTTP w obiektach kontekstu statycznego, akcje internetowego interfejsu API działają z wystąpieniami httpRequestMessage i HttpResponseMessage. Utwórz projekt testów jednostkowych wraz z projektem internetowego interfejsu API, aby szybko rozpocząć pisanie testów jednostkowych dla funkcji internetowego interfejsu API.
  • Konfiguracja oparta na kodzie: ASP.NET konfiguracja internetowego interfejsu API odbywa się wyłącznie za pomocą kodu, pozostawiając pliki konfiguracji czyste. Użyj udostępnionego wzorca lokalizatora usług, aby skonfigurować punkty rozszerzalności.
  • Ulepszona obsługa kontenerów inwersji kontrolek (IoC): ASP.NET internetowy interfejs API zapewnia doskonałą obsługę kontenerów IoC dzięki ulepszonej abstrakcji rozpoznawania zależności
  • Host własny: Interfejsy API sieci Web mogą być hostowane we własnym procesie oprócz usług IIS, jednocześnie w pełni wykorzystując pełny potencjał tras i innych funkcji interfejsu API sieci Web.
  • Utwórz niestandardową pomoc i strony testowe: Teraz możesz łatwo tworzyć niestandardowe strony pomocy i testowania dla internetowych interfejsów API przy użyciu nowej usługi IApiExplorer , aby uzyskać pełny opis środowiska uruchomieniowego internetowych interfejsów API.
  • Monitorowanie i diagnostyka: ASP.NET interfejs API sieci Web udostępnia teraz lekką infrastrukturę śledzenia, która umożliwia łatwą integrację z istniejącymi rozwiązaniami rejestrowania, takimi jak System.Diagnostics, ETW i frameworki innych firm. Śledzenie można włączyć, udostępniając implementację ITraceWriter i dodając ją do konfiguracji internetowego interfejsu API.
  • Generowanie linków: Użyj ASP.NET Web API UrlHelper , aby wygenerować linki do powiązanych zasobów w tej samej aplikacji.
  • Szablon projektu Web API: Wybierz nowy projekt Web API w kreatorze Nowy projekt MVC 4, aby szybko rozpocząć pracę z ASP.NET Web API.
  • Szkielet: Okno dialogowe Dodawanie kontrolera umożliwia szybkie tworzenie szkieletu kontrolera API na podstawie modelu opartego na Entity Framework.

Aby uzyskać więcej informacji na temat internetowego interfejsu API ASP.NET, odwiedź stronę https://www.asp.net/web-api.

Ulepszenia domyślnych szablonów projektów

Szablon używany do tworzenia nowych projektów MVC 4 ASP.NET został zaktualizowany w celu utworzenia bardziej nowoczesnej witryny internetowej:

Zrzut ekranu przedstawiający widok przeglądarki strony nowego szablonu projektu.

Oprócz ulepszeń kosmetycznych w nowym szablonie wprowadzono ulepszone funkcje. Szablon wykorzystuje technikę o nazwie renderowanie adaptacyjne, aby wyglądać dobrze zarówno w przeglądarkach klasycznych, jak i przeglądarkach mobilnych bez żadnego dostosowania.

Zrzut ekranu przedstawiający widok w przeglądarce mobilnej wersji desktopowej nowej strony szablonu projektu.

Aby zobaczyć renderowanie adaptacyjne w działaniu, możesz użyć emulatora mobilnego lub po prostu spróbować zmienić rozmiar okna przeglądarki klasycznej, aby było mniejsze. Gdy okno przeglądarki zostanie wystarczająco małe, układ strony zmieni się.

Szablon projektu mobilnego

Jeśli rozpoczynasz nowy projekt i chcesz utworzyć witrynę specjalnie dla przeglądarek dla urządzeń przenośnych i tabletów, możesz użyć nowego szablonu projektu Aplikacja mobilna. Jest to oparte na usłudze jQuery Mobile, bibliotece typu open source do tworzenia interfejsu użytkownika zoptymalizowanego pod kątem dotyku:

Zrzut ekranu przedstawiający widok przeglądarki mobilnej szablonu projektu aplikacji mobilnej.

Ten szablon zawiera tę samą strukturę aplikacji co szablon aplikacji internetowej (i kod kontrolera jest praktycznie identyczny), ale stylizowany przy użyciu aplikacji jQuery Mobile dobrze wygląda i działa dobrze na urządzeniach przenośnych opartych na dotyku. Aby dowiedzieć się więcej na temat struktury i stylu mobilnego interfejsu użytkownika, zobacz witrynę internetową projektu jQuery Mobile.

Jeśli masz już witrynę zorientowaną na komputery, do której chcesz dodać widoki zoptymalizowane pod kątem urządzeń przenośnych, lub jeśli chcesz utworzyć jedną witrynę, która obsługuje różne widoki w przeglądarkach klasycznych i mobilnych, możesz użyć nowej funkcji Tryby wyświetlania. (Zobacz następną sekcję).

Tryby wyświetlania

Nowa funkcja Tryby wyświetlania umożliwia aplikacji wybieranie widoków w zależności od przeglądarki wysyłającej żądanie. Jeśli na przykład przeglądarka klasyczna zażąda strony głównej, aplikacja może użyć szablonu Views\Home\Index.cshtml. Jeśli przeglądarka mobilna żąda strony głównej, aplikacja może zwrócić szablon Views\Home\Index.mobile.cshtml.

Układy i fragmenty mogą być również zastępowane dla określonych rodzajów przeglądarek. Przykład:

  • Jeśli folder Views\Shared zawiera zarówno szablony _Layout.cshtml, jak i _Layout.mobile.cshtml, domyślnie aplikacja będzie używać _Layout.mobile.cshtml podczas żądań z przeglądarek mobilnych i _Layout.cshtml podczas innych żądań.
  • Jeśli folder zawiera zarówno _MyPartial.cshtml, jak i _MyPartial.mobile.cshtml, instrukcja @Html.Partial("_MyPartial") spowoduje renderowanie _MyPartial.mobile.cshtml podczas żądań z przeglądarek mobilnych oraz _MyPartial.cshtml podczas innych żądań.

Jeśli chcesz utworzyć bardziej szczegółowe widoki, układy lub widoki częściowe dla innych urządzeń, możesz zarejestrować nowe wystąpienie DefaultDisplayMode , aby określić nazwę do wyszukania, gdy żądanie spełnia określone warunki. Możesz na przykład dodać następujący kod do metody Application_Start w pliku Global.asax, aby zarejestrować ciąg "iPhone" jako tryb wyświetlania, który ma zastosowanie, gdy przeglądarka Apple iPhone wysyła żądanie:

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

Po uruchomieniu tego kodu, gdy przeglądarka Apple iPhone wyśle żądanie, aplikacja będzie używać układu Views\Shared\_Layout.iPhone.cshtml (jeśli istnieje). Aby uzyskać więcej informacji na temat trybu wyświetlania, zobacz ASP.NET funkcje mobilne MVC 4. Aplikacje korzystające z elementu DisplayModeProvider powinny zainstalować pakiet NuGet Fixed DisplayModes . Aktualizacja ASP.NET jesień 2012 zawiera pakiet NuGet Fixed DisplayModes w nowych szablonach projektowych. Aby uzyskać szczegółowe informacje na temat poprawki, zobacz ASP.NET MVC 4 Mobile Caching Bug Fixedd (Naprawiono usterkę buforowania mobilnego MVC 4 ).

jQuery Mobile i funkcje mobilne

Aby uzyskać informacje na temat tworzenia aplikacji mobilnych za pomocą ASP.NET MVC 4 przy użyciu usługi jQuery Mobile, zobacz samouczek ASP.NET funkcje mobilne MVC 4.

Obsługa zadań dla kontrolerów asynchronicznych

Teraz można pisać metody akcji asynchronicznych jako pojedyncze metody zwracające obiekt typu Task<lub Task ActionResult>.

Aby uzyskać więcej informacji, zobacz Using Asynchronous Methods in ASP.NET MVC 4 (Używanie metod asynchronicznych w ASP.NET MVC 4).

Azure SDK

ASP.NET MVC 4 obsługuje wersje 1.6 i nowsze zestawu Windows Azure SDK.

Migracje bazy danych

ASP.NET projekty MVC 4 obejmują teraz program Entity Framework 5. Jedną z doskonałych funkcji w programie Entity Framework 5 jest obsługa migracji baz danych. Ta funkcja umożliwia łatwe rozwijanie schematu bazy danych przy użyciu migracji ukierunkowanej na kod przy jednoczesnym zachowaniu danych w bazie danych. Aby uzyskać więcej informacji na temat migracji bazy danych, zobacz Dodawanie nowego pola do modelu filmowego i tabeli w samouczku Wprowadzenie do ASP.NET MVC 4.

Pusty szablon projektu

Szablon projektu 'Empty' MVC jest teraz naprawdę pusty, dzięki czemu można zacząć od zera. Wcześniejsza wersja szablonu pustego projektu została zmieniona na Podstawowa.

Dodawanie kontrolera do dowolnego folderu projektu

Teraz możesz kliknąć prawym przyciskiem myszy i wybrać polecenie Dodaj kontroler z dowolnego folderu w projekcie MVC. Zapewnia to większą elastyczność organizowania kontrolerów, w tym przechowywanie kontrolerów MVC i internetowych interfejsów API w oddzielnych folderach.

Tworzenie pakietów i minifikacja

Struktura tworzenia pakietów i minyfikacji umożliwia zmniejszenie liczby żądań HTTP, które musi wykonać strona internetowa, łącząc poszczególne pliki w jeden, dołączony plik dla skryptów i CSS. Następnie może zmniejszyć całkowity rozmiar tych żądań, minyfikowając zawartość pakietu. Minimalizowanie może obejmować działania, takie jak eliminowanie białych znaków, skracanie nazw zmiennych czy nawet zwijanie selektorów CSS na podstawie ich semantyki. Pakiety są deklarowane i konfigurowane w kodzie i są łatwo przywołyne w widokach za pośrednictwem metod pomocnika, które mogą generować pojedynczy link do pakietu lub, podczas debugowania, wiele linków do pojedynczej zawartości pakietu. Aby uzyskać więcej informacji, zobacz Tworzenie pakietów i minimalizacja (Bundling and Minification).

Włączanie logowania z serwisu Facebook i innych witryn przy użyciu protokołu OAuth i OpenID

Szablony domyślne w szablonie ASP.NET MVC 4 Internet Project zawierają teraz obsługę logowania OAuth i OpenID przy użyciu biblioteki DotNetOpenAuth. Aby uzyskać informacje na temat konfigurowania dostawcy OAuth lub OpenID, zobacz OAuth/OpenID Support for WebForms, MVC and WebPages (Obsługa protokołu OAuth/OpenID dla form WebForms, MVC i WebPages ) oraz dokumentację funkcji OAuth i OpenID w witrynie ASP.NET Web Pages.

Uaktualnianie projektu MVC 3 ASP.NET do ASP.NET MVC 4

ASP.NET MVC 4 można zainstalować obok ASP.NET MVC 3 na tym samym komputerze, co zapewnia elastyczność podczas uaktualniania aplikacji ASP.NET MVC 3 do ASP.NET MVC 4.

Najprostszym sposobem uaktualnienia jest utworzenie nowego projektu ASP.NET MVC 4 i skopiowanie widoków, kontrolerów, kodu i plików z istniejącego projektu MVC 3 do nowego projektu, a następnie zaktualizowanie odwołań do zestawów w nowym projekcie, aby dopasować odwołania do przyłączonych zestawów, które nie są częścią szablonów MVC, a które są używane. Jeśli wprowadzono zmiany w pliku Web.config w projekcie MVC 3, należy również scalić te zmiany w pliku Web.config w projekcie MVC 4.

Aby ręcznie uaktualnić istniejącą aplikację MVC 3 ASP.NET do wersji 4, wykonaj następujące czynności:

  1. We wszystkich plikach Web.config w projekcie (jest jeden w katalogu głównym projektu, jeden w folderze Views oraz jeden w folderze Views dla każdej strefy w twoim projekcie), zastąp każde wystąpienie następującego tekstu (uwaga: System.Web.WebPages, Wersja=1.0.0.0 nie występuje w projektach utworzonych za pomocą programu 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
    

    z następującym tekstem:

    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. W głównym pliku Web.config zaktualizuj element webPages:Version na "2.0.0.0.0" i dodaj nowy klucz PreserveLoginUrl o wartości "true":

    <appSettings>
      <add key="webpages:Version" value="2.0.0.0" />
      <add key="PreserveLoginUrl" value="true" />
    </appSettings>
    
  3. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy odwołania i wybierz Zarządzaj pakietami NuGet. W okienku po lewej stronie wybierz pozycję Online\NuGet oficjalne źródło pakietu, a następnie zaktualizuj następujące informacje:

    • ASP.NET MVC 4
    • (Opcjonalnie) jQuery, jQuery Validation i jQuery UI
    • (Opcjonalnie) Entity Framework
    • (Opcjonalnie) Modernizr
  4. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy nazwę projektu, a następnie wybierz polecenie Zwolnij projekt. Następnie ponownie kliknij prawym przyciskiem myszy nazwę i wybierz polecenie Edytuj ProjectName.csproj.

  5. Znajdź element ProjectTypeGuids i zastąp element {E53F8FEA-EAE0-44A6-8774-FFD645390401} elementem {E3E379DF-F4C6-4180-9B81-6769533ABE47}.

  6. Zapisz zmiany, zamknij edytowany plik projektu (csproj), kliknij prawym przyciskiem myszy projekt, a następnie wybierz polecenie Załaduj ponownie projekt.

  7. Jeśli projekt odwołuje się do dowolnych bibliotek innych firm, które są kompilowane przy użyciu poprzednich wersji ASP.NET MVC, otwórz plik Web.config katalogu głównego i dodaj następujące trzy elementy bindingRedirect w sekcji konfiguracji :

    <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>
    

Zmiany z ASP.NET MVC 4 Release Candidate

Informacje o wersji ASP.NET MVC 4 Release Candidate można znaleźć tutaj:

Główne zmiany z ASP.NET MVC 4 Release Candidate w tej wersji zostały podsumowane poniżej:

  • Konfiguracja kontrolera: Kontrolery ASP.NET Web API można oznaczyć niestandardowym atrybutem implementującym IControllerConfiguration w celu skonfigurowania ich własnych formatatorów, selektora akcji i wiązań parametrów. Atrybut HttpControllerConfigurationAttribute został usunięty.
  • Procedury obsługi komunikatów dla routy: Teraz można określić finalną obsługę komunikatów w łańcuchu żądań dla danej routy. Umożliwia to obsługę platform ride-along w celu używania routingu do wysyłania do własnych punktów końcowych (innych niż IHttpController).
  • Powiadomienia o postępie: Program ProgressMessageHandler generuje powiadomienie o postępie dla jednostek żądań przekazywanych i pobieranych jednostek odpowiedzi. Korzystając z tego handlera, można śledzić postęp wysyłania treści żądania lub odbierania treści odpowiedzi.
  • Wypychanie zawartości: Klasa PushStreamContent umożliwia sytuacje, w których producent danych chce zapisywać bezpośrednio do żądania lub odpowiedzi (zarówno synchronicznie, jak i asynchronicznie) za pomocą strumienia. Gdy element PushStreamContent jest gotowy do akceptowania danych, wywołuje delegat akcji ze strumieniem wyjściowym. Deweloper może następnie zapisywać w strumieniu tak długo, jak to konieczne, i zamknąć strumień po zakończeniu pisania. Element PushStreamContent wykrywa zamknięcie strumienia i kończy bazowe asynchroniczne zadanie związane z zapisaniem zawartości.
  • Tworzenie odpowiedzi na błędy: Użyj typu HttpError, aby spójnie reprezentować informacje o błędach, takie jak błędy walidacji i wyjątki, podczas gdy nadal są uznawane za IncludeErrorDetailPolicy. Użyj nowych metod rozszerzenia CreateErrorResponse, aby łatwo tworzyć odpowiedzi na błędy za pomocą HttpError jako treści. Zawartość httpError jest w pełni negocjowana.
  • Usunięto element MediaRangeMapping: Zakresy typów multimediów są teraz obsługiwane przez domyślny negocjator zawartości.
  • Domyślne powiązanie parametrów dla parametrów prostego typu to teraz [FromUri]: W poprzednich wersjach interfejsu API sieci Web ASP.NET domyślne powiązanie parametrów dla parametrów prostego typu używało powiązania modelu. Domyślne powiązanie parametrów dla parametrów prostego typu to teraz [FromUri].
  • Wybór akcji honoruje wymagane parametry: Wybór akcji w ASP.NET Web API będzie teraz wybierze akcję tylko wtedy, gdy wszystkie wymagane parametry pochodzące z URI zostaną podane. Parametr można określić jako opcjonalny, podając wartość domyślną argumentu w podpisie metody akcji.
  • Dostosowywanie powiązań parametrów HTTP: Użyj parametru ParameterBindingAttribute , aby dostosować powiązanie parametru dla określonego parametru akcji lub użyć parametru ParameterBindingRules w httpConfiguration , aby dostosować powiązania parametrów szerzej.
  • Ulepszenia MediaTypeFormatter: Formaterzy mają teraz dostęp do pełnego wystąpienia HttpContent.
  • Wybór zasad buforowania hosta: Zaimplementuj i skonfiguruj usługę IHostBufferPolicySelector w interfejsie API sieci Web ASP.NET, aby umożliwić hostom określenie zasad używanych podczas buforowania.
  • Uzyskiwanie dostępu do certyfikatów klienta w sposób niezależny od hosta: Użyj metody rozszerzenia GetClientCertificate , aby pobrać dostarczony certyfikat klienta z komunikatu żądania.
  • Rozszerzalność negocjacji zawartości: Dostosuj negocjacje zawartości, wyprowadzając je z elementu DefaultContentNegotiator i przesłaniając dowolny aspekt negocjacji zawartości.
  • Obsługa zwracania odpowiedzi 406 Nie do przyjęcia: Teraz można zwrócić odpowiedzi 406 Nie do przyjęcia w ASP.NET Web API, gdy nie zostanie znaleziony odpowiedni formatator, tworząc DefaultContentNegotiator z parametrem excludeMatchOnTypeOnly ustawionym na true.
  • Odczytaj dane formularza jako NameValueCollection lub JToken: Dane formularza można odczytywać w parametrach zapytania identyfikatora URI lub w treści żądania jako NameValueCollection, używając odpowiednio metod rozszerzeń ParseQueryString i ReadAsFormDataAsync. Podobnie dane formularza można odczytywać w ciągu zapytania identyfikatora URI lub w treści żądania jako JToken przy użyciu metod rozszerzenia TryReadQueryAsJson oraz ReadAsAsync<T>, odpowiednio.
  • Ulepszenia wieloczęściowe: Teraz można napisać multipartStreamProvider , który jest całkowicie dostosowany do typu danych wieloczęściowych MIME, które mogą odczytywać i prezentować wynik w optymalny sposób dla użytkownika. Możesz również dodać etap przetwarzania końcowego do MultipartStreamProvider, który pozwala implementacji na wykonanie dowolnych operacji końcowych na wieloczęściowych komponentach treści MIME. Na przykład implementacja MultipartFormDataStreamProvider odczytuje części danych formularza HTML i dodaje je do kolekcji NameValueCollection , dzięki czemu można je łatwo uzyskać z obiektu wywołującego.
  • Ulepszenia generowania linków: Element UrlHelper nie zależy już od obiektu HttpControllerContext. Teraz możesz uzyskać dostęp do elementu UrlHelper z dowolnego kontekstu, w którym jest dostępny komunikat HttpRequestMessage .
  • Zmiana kolejności wykonywania programu obsługi komunikatów: Programy obsługi komunikatów są teraz wykonywane w kolejności, w której są skonfigurowane zamiast w odwrotnej kolejności.
  • Pomocnik do podłączania programów obsługi komunikatów: Nowy element HttpClientFactory, który może połączyć DelegatingHandlers i utworzyć klienta HttpClient z przygotowanym potokiem gotowym do użycia. Udostępnia również funkcję konfigurowania połączeń z alternatywnymi wewnętrznymi programami obsługi (domyślnie jest to HttpClientHandler), a także konfigurowanie połączeń podczas korzystania z HttpMessageInvoker lub innego DelegatingHandler zamiast HttpClient jako głównego wywołującego.
  • Obsługa sieci CDN w ASP.NET optymalizacji sieci Web: ASP.NET optymalizacja sieci Web zapewnia teraz obsługę alternatywnych ścieżek sieci CDN umożliwiających określenie dla każdego pakietu dodatkowego adresu URL wskazującego ten sam zasób w sieci dostarczania zawartości. Obsługa sieci CDN umożliwia uzyskanie pakietów skryptów i stylów geograficznie bliżej odbiorców końcowych aplikacji internetowych. Aplikacje produkcyjne powinny implementować zapasowe rozwiązanie, gdy CDN jest niedostępne. Przetestuj alternatywę.
  • Trasy i konfiguracja ASP.NET Web API zostały przeniesione do metody statycznej WebApiConfig.Register, która może być ponownie użyta w kodzie testowym. ASP.NET trasy interfejsów API sieciowego były wcześniej dodawane w funkcji RouteConfig.RegisterRoutes razem ze standardowymi trasami MVC. Domyślne trasy i konfiguracja interfejsu Web API ASP.NET są teraz obsługiwane przez oddzielną metodę WebApiConfig.Register dla ułatwienia testowania.

Znane problemy i zmiany powodujące niezgodność

  • Wersja RC i RTM ASP.NET MVC 4 niepoprawnie zwróciła buforowane widoki pulpitu, gdy powinny zostać zwrócone widoki mobilne.

  • Zmiany niekompatybilne w silniku widoku Razor. Następujące typy zostały usunięte z pliku System.Web.Mvc.Razor:

    • ModelSpan
    • MvcVBRazorCodeGenerator
    • MvcCSharpRazorCodeGenerator
    • MvcVBRazorCodeParser

    Usunięto również następujące metody:

    • MvcCSharpRazorCodeParser.ParseInheritsStatement(System.Web.Razor.Parser.CodeBlockInfo)
    • MvcWebPageRazorHost.DecorateCodeGenerator(System.Web.Razor.Generator.RazorCodeGenerator)
    • MvcVBRazorCodeParser.ParseInheritsStatement(System.Web.Razor.Parser.CodeBlockInfo)
  • Gdy WebMatrix.WebData.dll znajduje się w katalogu /bin aplikacji ASP.NET MVC 4, przejmuje adres URL uwierzytelniania formularzy. Dodanie zestawu WebMatrix.WebData.dll do aplikacji (na przykład wybranie pozycji "ASP.NET strony sieci Web ze składnią Razor" podczas korzystania z okna dialogowego Dodawanie zależności możliwych do wdrożenia) spowoduje zastąpienie przekierowania logowania uwierzytelniania do /account/logon, a nie /account/login zgodnie z oczekiwaniami domyślnie ASP.NET kontroler konta MVC. Aby zapobiec temu zachowaniu i użyć adresu URL określonego już w sekcji uwierzytelniania web.config, możesz dodać element appSetting o nazwie PreserveLoginUrl i ustawić go na true:

    <appSettings>
        <add key="PreserveLoginUrl" value="true"/>
    </appSettings>
    
  • Nie można zainstalować menedżera pakietów NuGet podczas próby zainstalowania ASP.NET MVC 4 dla instalacji równoległych programów Visual Studio 2010 i Visual Web Developer 2010. Aby uruchomić programy Visual Studio 2010 i Visual Web Developer 2010 obok ASP.NET MVC 4, należy zainstalować ASP.NET MVC 4 po zainstalowaniu obu wersji programu Visual Studio.

  • Odinstalowanie ASP.NET MVC 4 kończy się niepowodzeniem, jeśli zostały już odinstalowane wymagania wstępne. Aby odinstalować ASP.NET MVC 4, należy odinstalować ASP.NET MVC 4 przed odinstalowaniem programu Visual Studio.

  • Instalowanie ASP.NET MVC 4 przerywa działanie ASP.NET aplikacji MVC 3 RTM. Aplikacje ASP.NET MVC 3 utworzone za pomocą wersji RTM (a nie za pomocą aktualizacji narzędzi ASP.NET MVC 3) wymagają następujących zmian, aby działać równolegle z ASP.NET MVC 4. Kompilowanie projektu bez wprowadzania tych aktualizacji powoduje błędy kompilacji.

    Wymagane aktualizacje

    1. W głównym pliku Web.config dodaj nowy <wpis appSettings> z kluczem webPages:Version i wartością 1.0.0.0.

      <appSettings>
          <add key="webpages:Version" value="1.0.0.0"/>
          <add key="ClientValidationEnabled" value="true"/>
          <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
      </appSettings>
      
    2. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy nazwę projektu, a następnie wybierz polecenie Zwolnij projekt. Następnie ponownie kliknij prawym przyciskiem myszy nazwę i wybierz polecenie Edytuj ProjectName.csproj.

    3. Znajdź następujące referencje do zestawów:

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

      Zastąp je następującymi elementami:

      <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. Zapisz zmiany, zamknij edytowany plik projektu (csproj), a następnie kliknij prawym przyciskiem myszy projekt i wybierz polecenie Załaduj ponownie.

  • Zmiana projektu ASP.NET MVC 4 na docelową 4.0 z wersji 4.5 nie powoduje zaktualizowania odwołania do zestawu EntityFramework: Jeśli zmienisz projekt ASP.NET MVC 4 na docelowy 4.0 po wskazaniu wartości docelowej 4.5 odwołanie do zestawu EntityFramework nadal będzie wskazywać wersję 4.5. Aby rozwiązać ten problem, odinstaluj i ponownie zainstaluj pakiet NuGet EntityFramework.

  • 403 Zabronione podczas uruchamiania aplikacji ASP.NET MVC 4 na platformie Azure po zmianie docelowej wersji z 4.5 na 4.0: Jeśli zmienisz projekt ASP.NET MVC 4 z wersji docelowej 4.5 na 4.0, a następnie wdrożysz na platformie Azure, podczas wykonywania aplikacji może pojawić się błąd 403 Zabronione. Aby obejść ten problem, dodaj następujące elementy do web.config: <modules runAllManagedModulesForAllRequests="true" />

  • Program Visual Studio 2012 ulega awarii, gdy wpiszesz znak "" w literału ciągu w pliku Razor. Aby obejść problem, wprowadź najpierw cudzysłów zamykający literał ciągu.

  • Przejście do pozycji "Konto/zarządzanie" w szablonie internetowym powoduje błąd środowiska uruchomieniowego dla języków CHS, TRK i CHT. Aby rozwiązać problem, zmodyfikuj stronę, aby oddzielić @User.Identity.Name, umieszczając go jako jedyną zawartość w tagu <strong>.

  • Dostawcy Usług Google i LinkedIn nie są obsługiwani w witrynach internetowych platformy Azure. Użyj alternatywnych dostawców uwierzytelniania podczas wdrażania w witrynach sieci Web platformy Azure.

  • Kiedy używasz UriPathExtensionMapping z usługami IIS 8 Express/IIS, podczas próby użycia rozszerzenia otrzymujesz błąd 404: Nie znaleziono. Obsługujący pliki statyczne będzie ingerować w żądania do interfejsów API sieci Web korzystających z UriPathExtensionMappings. Ustaw parametr runAllManagedModulesForAllRequests=true w web.config, aby obejść problem.

  • Metoda Controller.Execute nie jest już wywoływana. Wszystkie kontrolery MVC są teraz zawsze wykonywane asynchronicznie.