Udostępnij za pośrednictwem


Rozszerzenie ASP.NET and Web Tools dla programu Visual Studio 2013 — informacje o wersji

autor: Microsoft

W tym dokumencie opisano wydanie ASP.NET and Web Tools dla Visual Studio 2013.

Zawartość

Nowe funkcje w ASP.NET and Web Tools dla Visual Studio 2013

Uwagi dotyczące instalacji

ASP.NET and Web Tools dla Visual Studio 2013 są dołączone do głównego instalatora i można je pobrać tutaj.

Dokumentacja

Samouczki i inne informacje o ASP.NET and Web Tools dla Visual Studio 2013 są dostępne w witrynie internetowej ASP.NET.

Wymagania programowe

ASP.NET and Web Tools wymaga Visual Studio 2013.

Nowe funkcje w ASP.NET and Web Tools dla Visual Studio 2013

W poniższych sekcjach opisano funkcje wprowadzone w tej wersji.

Jeden ASP.NET

Wraz z wydaniem Visual Studio 2013 zrobiliśmy krok w kierunku ujednolicenia doświadczenia korzystania z technologii ASP.NET, dzięki czemu można łatwo mieszać i dopasowywać te, które chcesz. Można na przykład uruchomić projekt przy użyciu wzorca MVC i łatwo dodać strony Web Forms do projektu później lub utworzyć szkielet internetowych interfejsów API w projekcie Web Forms. Jednym z ASP.NET jest ułatwienie tobie jako deweloperowi robienia rzeczy, które kochasz w ASP.NET. Niezależnie od wybranej technologii możesz mieć pewność, że tworzysz zaufaną podstawową strukturę one ASP.NET.

Nowe środowisko projektu internetowego

Ulepszyliśmy środowisko tworzenia nowych projektów internetowych w Visual Studio 2013. W oknie dialogowym Nowy projekt internetowy ASP.NET można wybrać odpowiedni typ projektu, skonfigurować dowolną kombinację technologii (Web Forms, MVC, internetowy interfejs API), skonfigurować opcje uwierzytelniania i dodać projekt testu jednostkowego.

Nowy projekt ASP.NET

Nowe okno dialogowe umożliwia zmianę domyślnych opcji uwierzytelniania dla wielu szablonów. Na przykład podczas tworzenia projektu ASP.NET Web Forms można wybrać dowolną z następujących opcji:

  • Bez uwierzytelniania
  • Indywidualne konta użytkowników (ASP.NET członkostwem lub logowaniem dostawcy społecznościowego)
  • Konta organizacyjne (usługa Active Directory w aplikacji internetowej)
  • Uwierzytelnianie systemu Windows (usługa Active Directory w aplikacji intranetowej)

Opcje uwierzytelniania

Aby uzyskać więcej informacji na temat nowego procesu tworzenia projektów internetowych, zobacz Creating ASP.NET Web Projects in Visual Studio 2013 (Tworzenie projektów internetowych ASP.NET w Visual Studio 2013). Aby uzyskać więcej informacji na temat nowych opcji uwierzytelniania, zobacz ASP.NET Identity w dalszej części tego dokumentu.

tworzenie szkieletów ASP.NET

ASP.NET tworzenie szkieletów to struktura generowania kodu dla aplikacji internetowych ASP.NET. Dzięki temu można łatwo dodać standardowy kod do projektu, który wchodzi w interakcję z modelem danych.

W poprzednich wersjach programu Visual Studio tworzenie szkieletów było ograniczone do ASP.NET projektów MVC. Dzięki Visual Studio 2013 można teraz używać szkieletu dla dowolnego projektu ASP.NET, w tym Web Forms. Visual Studio 2013 obecnie nie obsługuje generowania stron dla projektu Web Forms, ale nadal można używać szkieletu z Web Forms przez dodanie zależności MVC do projektu. Obsługa generowania stron dla Web Forms zostanie dodana w przyszłej aktualizacji.

W przypadku korzystania z tworzenia szkieletów upewniamy się, że wszystkie wymagane zależności są zainstalowane w projekcie. Jeśli na przykład rozpoczniesz od projektu ASP.NET Web Forms, a następnie użyjesz szkieletu w celu dodania kontrolera internetowego interfejsu API, wymagane pakiety NuGet i odwołania zostaną automatycznie dodane do projektu.

Aby dodać szkielet MVC do projektu Web Forms, dodaj nowy element szkieletowy i wybierz pozycję Zależności MVC 5 w oknie dialogowym. Istnieją dwie opcje tworzenia szkieletów MVC; Minimalny i pełny. W przypadku wybrania opcji Minimum do projektu zostaną dodane tylko pakiety NuGet i odwołania do ASP.NET MVC. W przypadku wybrania opcji Pełna zostaną dodane minimalne zależności, a także wymagane pliki zawartości dla projektu MVC.

Obsługa tworzenia szkieletów kontrolerów asynchronicznych korzysta z nowych funkcji asynchronicznych z programu Entity Framework 6.

Aby uzyskać więcej informacji i samouczków, zobacz omówienie tworzenia szkieletów ASP.NET.

Nowa funkcja Link przeglądarki umożliwia łączenie wielu przeglądarek z programem Visual Studio i odświeżanie ich wszystkich przez kliknięcie przycisku na pasku narzędzi. Możesz połączyć wiele przeglądarek z witryną dewelopera, w tym emulatory mobilne, i kliknąć przycisk Odśwież, aby odświeżyć wszystkie przeglądarki jednocześnie. Link przeglądarki udostępnia również interfejs API, aby umożliwić deweloperom pisanie rozszerzeń linków przeglądarki.

Zrzut ekranu przedstawiający menu programu Visual Studio z wyróżnioną ikoną Odśwież i pulpitem nawigacyjnym linku przeglądarki wyróżnionym w menu rozwijanym.

Dzięki umożliwieniu deweloperom korzystania z interfejsu API linku przeglądarki można utworzyć bardzo zaawansowane scenariusze, które przekraczają granice między programem Visual Studio i dowolną połączoną przeglądarką. Program Web Essentials korzysta z interfejsu API w celu utworzenia zintegrowanego środowiska między programem Visual Studio i narzędziami deweloperskimi przeglądarki, zdalnym sterowaniem emulatorami urządzeń przenośnych i o wiele więcej.

Ulepszenia edytora internetowego programu Visual Studio

Visual Studio 2013 zawiera nowy edytor HTML dla plików Razor i plików HTML w aplikacjach internetowych. Nowy edytor HTML udostępnia jeden ujednolicony schemat oparty na kodzie HTML5. Ma automatyczne uzupełnianie nawiasów klamrowych, interfejs użytkownika jQuery i atrybut AngularJS IntelliSense, grupowanie atrybutów IntelliSense atrybutów IntelliSense, identyfikatorów i klas oraz inne ulepszenia, w tym lepszą wydajność, formatowanie i tagi Inteligentne.

Poniższy zrzut ekranu przedstawia użycie atrybutu Bootstrap IntelliSense w edytorze HTML.

Funkcja IntelliSense w edytorze HTML

Visual Studio 2013 zawiera również wbudowane edytory CoffeeScript i LESS. Edytor LESS zawiera wszystkie fajne funkcje edytora CSS i ma konkretną funkcję IntelliSense dla zmiennych i miesza we wszystkich dokumentach LESS w łańcuchu @import .

obsługa Azure App Service Web Apps w programie Visual Studio

W Visual Studio 2013 z zestawem Azure SDK dla platformy .NET 2.2 możesz użyć Eksploratora serwera do bezpośredniej interakcji ze zdalnymi aplikacjami internetowymi. Możesz zalogować się do konta platformy Azure, utworzyć nowe aplikacje internetowe, skonfigurować aplikacje, wyświetlić dzienniki czasu rzeczywistego i nie tylko. Wkrótce po wydaniu zestawu SDK 2.2 będzie można uruchomić zdalnie w trybie debugowania na platformie Azure. Większość nowych funkcji Azure App Service Web Apps również działa w programie Visual Studio 2012 podczas instalowania bieżącej wersji zestawu Azure SDK dla platformy .NET.

Więcej informacji można znaleźć w następujących zasobach:

Ulepszenia publikowania w internecie

Visual Studio 2013 zawiera nowe i ulepszone funkcje publikowania w sieci Web. Oto kilka z nich:

Aby uzyskać więcej informacji na temat ASP.NET wdrażania w Internecie, zobacz witrynę ASP.NET.

NuGet 2.7

NuGet 2.7 zawiera bogaty zestaw nowych funkcji, które zostały szczegółowo opisane w temacie Informacje o wersji nuGet 2.7.

Ta wersja pakietu NuGet eliminuje również konieczność udzielenia jawnej zgody na funkcję przywracania pakietów NuGet w celu pobrania pakietów. Zgoda (i skojarzone pole wyboru w oknie dialogowym preferencji NuGet) jest teraz udzielana przez zainstalowanie pakietu NuGet. Teraz przywracanie pakietów po prostu działa domyślnie.

Formularze sieci Web ASP.NET

Jeden ASP.NET

Szablony projektów Web Forms bezproblemowo integrują się z nowym środowiskiem one ASP.NET. Obsługę wzorca MVC i internetowego interfejsu API można dodać do projektu Web Forms i skonfigurować uwierzytelnianie przy użyciu kreatora tworzenia projektu One ASP.NET. Aby uzyskać więcej informacji, zobacz Creating ASP.NET Web Projects in Visual Studio 2013 (Tworzenie projektów sieci Web ASP.NET w Visual Studio 2013).

ASP.NET Identity

Szablony projektów Web Forms obsługują nową platformę ASP.NET Identity. Ponadto szablony obsługują teraz tworzenie projektu intranetowego Web Forms. Aby uzyskać więcej informacji, zobacz Metody uwierzytelniania w temacie Tworzenie projektów internetowych ASP.NET w Visual Studio 2013.

Uruchomienie

Szablony Web Forms używają metody Bootstrap, aby zapewnić elegancki i dynamiczny wygląd i działanie, które można łatwo dostosować. Aby uzyskać więcej informacji, zobacz Bootstrap w szablonach projektów internetowych Visual Studio 2013.

ASP.NET MVC 5

Jeden ASP.NET

Szablony projektów Web MVC bezproblemowo integrują się z nowym środowiskiem one ASP.NET. Projekt MVC można dostosować i skonfigurować uwierzytelnianie przy użyciu kreatora tworzenia projektu One ASP.NET. Samouczek wprowadzający do ASP.NET MVC 5 można znaleźć na stronie Wprowadzenie z ASP.NET MVC 5.

Aby uzyskać informacje na temat uaktualniania projektów MVC 4 do wzorca MVC 5, zobacz Jak uaktualnić ASP.NET MVC 4 i projekt internetowego interfejsu API do ASP.NET MVC 5 i internetowego interfejsu API 2.

ASP.NET Identity

Szablony projektów MVC zostały zaktualizowane w celu używania ASP.NET Identity do uwierzytelniania i zarządzania tożsamościami. Samouczek z uwierzytelnianiem w usłudze Facebook i Google oraz nowy interfejs API członkostwa można znaleźć w temacie Tworzenie aplikacji MVC 5 ASP.NET MVC przy użyciu usług Facebook i Google OAuth2 oraz logowanie OpenID oraz Tworzenie aplikacji MVC ASP.NET z uwierzytelnianiem i bazą danych SQL ORAZ wdrażanie w usłudze Azure App Service.

Uruchomienie

Szablon projektu MVC został zaktualizowany w celu użycia narzędzia Bootstrap w celu zapewnienia eleganckiego i dynamicznego wyglądu i działania, które można łatwo dostosować. Aby uzyskać więcej informacji, zobacz Bootstrap w szablonach projektów internetowych Visual Studio 2013.

Filtry uwierzytelniania

Filtry uwierzytelniania to nowy rodzaj filtru w ASP.NET MVC, który działa przed filtrami autoryzacji w potoku ASP.NET MVC i umożliwia określenie logiki uwierzytelniania na akcję, kontroler lub globalnie dla wszystkich kontrolerów. Filtry uwierzytelniania przetwarzają poświadczenia w żądaniu i dostarczają odpowiedniego podmiotu zabezpieczeń. Filtry uwierzytelniania mogą również dodawać wyzwania związane z uwierzytelnianiem w odpowiedzi na nieautoryzowane żądania.

Przesłonięcia filtrów

Teraz można zastąpić filtry stosowane do danej metody akcji lub kontrolera, określając filtr przesłonięcia. Filtry przesłonięcia określają zestaw typów filtrów, które nie powinny być uruchamiane dla danego zakresu (akcja lub kontroler). Dzięki temu można skonfigurować filtry, które mają zastosowanie globalnie, ale następnie wykluczyć niektóre filtry globalne z zastosowania do określonych akcji lub kontrolerów.

Routing atrybutów

ASP.NET MVC obsługuje teraz routing atrybutów, dzięki kontrybucie Tima McCalla, autora .http://attributerouting.net Za pomocą routingu atrybutów można określić trasy, dodając adnotacje do akcji i kontrolerów.

ASP.NET Web API 2

Routing atrybutów

ASP.NET internetowy interfejs API obsługuje teraz routing atrybutów, dzięki kontrybucjowi Tima McCalla, autorowi polecenia http://attributerouting.net. Za pomocą routingu atrybutów możesz określić trasy internetowego interfejsu API, dodając adnotacje do akcji i kontrolerów w następujący sposób:

[RoutePrefix("orders")] 
public class OrdersController : ApiController 
{ 
    [Route("{id}")] 
    public Order Get(int id) { } 
    [Route("{id}/approve")] 
    public Order Approve(int id) { } 
}

Routing atrybutów zapewnia większą kontrolę nad identyfikatorami URI w internetowym interfejsie API. Można na przykład łatwo zdefiniować hierarchię zasobów przy użyciu jednego kontrolera interfejsu API:

public class MoviesController : ApiController 
{ 
    [Route("movies")] 
    public IEnumerable<Movie> Get() { } 
    [Route("actors/{actorId}/movies")] 
    public IEnumerable<Movie> GetByActor(int actorId) { } 
    [Route("directors/{directorId}/movies")] 
    public IEnumerable<Movie> GetByDirector(int directorId) { } 
}

Routing atrybutów zapewnia również wygodną składnię określania opcjonalnych parametrów, wartości domyślnych i ograniczeń trasy:

// Optional parameter
[Route("people/{name?}")]
// Default value
[Route("people/{name=Dan}")]
// Constraint: Alphabetic characters only. 
[Route("people/{name:alpha}")]

Aby uzyskać więcej informacji na temat routingu atrybutów, zobacz Routing atrybutów w internetowym interfejsie API 2.

OAuth 2.0

Szablony projektów interfejsu API sieci Web i aplikacji jednostronicowej obsługują teraz autoryzację przy użyciu protokołu OAuth 2.0. OAuth 2.0 to struktura umożliwiająca autoryzowanie dostępu klienta do chronionych zasobów. Działa dla różnych klientów, w tym przeglądarek i urządzeń przenośnych.

Obsługa protokołu OAuth 2.0 jest oparta na nowym oprogramowaniu pośredniczącym zabezpieczeń udostępnianym przez składniki OWIN firmy Microsoft na potrzeby uwierzytelniania elementu nośnego i implementowaniu roli serwera autoryzacji. Alternatywnie klienci mogą być autoryzowani przy użyciu serwera autoryzacji organizacyjnej, takiego jak usługa Azure Active Directory lub usługi ADFS w Windows Server 2012 R2.

Ulepszenia OData

Obsługa $select, $expand, $batch i $value

Usługa OData internetowego interfejsu API ASP.NET ma teraz pełną obsługę $select, $expand i $value. Można również użyć $batch do przetwarzania wsadowego i przetwarzania zestawów zmian.

Opcje $select i $expand umożliwiają zmianę kształtu danych zwracanych z punktu końcowego OData. Aby uzyskać więcej informacji, zobacz Introducing $select and $expand support in Web API OData (Wprowadzenie do obsługi $select i obsługi $expand w internetowym interfejsie API OData).

Ulepszona rozszerzalność

Formatery OData są teraz rozszerzalne. Możesz dodać metadane wpisu Atom, obsługiwać wpisy nazwanego strumienia i linku multimedialnego, dodawać adnotacje wystąpień i dostosowywać sposób generowania łączy.

Obsługa bez typów

Teraz możesz tworzyć usługi OData bez konieczności definiowania typów CLR dla typów jednostek. Zamiast tego kontrolery OData mogą przyjmować lub zwracać wystąpienia obiektu IEdmObject, które są formaterami OData serializują/deserializują.

Ponowne używanie istniejącego modelu

Jeśli masz już istniejący model danych jednostki (EDM), możesz teraz ponownie użyć go bezpośrednio, zamiast tworzyć nowe. Jeśli na przykład używasz programu Entity Framework, możesz użyć modułu EDM tworzonego przez platformę EF.

Przetwarzanie wsadowe żądań

Przetwarzanie wsadowe żądań łączy wiele operacji w jedno żądanie HTTP POST, aby zmniejszyć ruch sieciowy i zapewnić łagodniejszy, mniej czatty interfejs użytkownika. ASP.NET internetowy interfejs API obsługuje teraz kilka strategii przetwarzania wsadowego żądań:

  • Użyj $batch punktu końcowego usługi OData.
  • Pakowanie wielu żądań do jednego żądania wieloczęściowego MIME.
  • Użyj niestandardowego formatu przetwarzania wsadowego.

Aby włączyć przetwarzanie wsadowe żądań, wystarczy dodać trasę z procedurą obsługi wsadowej do konfiguracji internetowego interfejsu API:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
        config.Routes.MapHttpBatchRoute( 
            routeName: "WebApiBatch", 
            routeTemplate: "api/batch", 
            batchHandler: new DefaultHttpBatchHandler(GlobalConfiguration.DefaultServer)); 
    } 
}

Możesz również kontrolować, czy żądania, czy wykonywane sekwencyjnie, czy w dowolnej kolejności.

Przenośny klient internetowego interfejsu API ASP.NET

Teraz możesz użyć klienta internetowego interfejsu API ASP.NET do tworzenia przenośnych bibliotek klas, które działają w Sklepie Windows i Windows Phone 8 aplikacji. Można również tworzyć przenośne formatery, które mogą być współużytkowane przez klienta i serwer.

Ulepszona możliwość testowania

Internetowy interfejs API 2 ułatwia testowanie jednostkowe kontrolerów interfejsu API. Wystarczy utworzyć wystąpienie kontrolera interfejsu API przy użyciu komunikatu żądania i konfiguracji, a następnie wywołać metodę akcji, którą chcesz przetestować. Można również łatwo wyśmiewać klasę UrlHelper dla metod akcji, które wykonują generowanie linków.

IHttpActionResult

Teraz można zaimplementować funkcję IHttpActionResult, aby hermetyzować wynik metod akcji internetowego interfejsu API. Metoda akcji IHttpActionResult zwrócona z metody akcji internetowego interfejsu API jest wykonywana przez środowisko uruchomieniowe ASP.NET internetowego interfejsu API w celu wygenerowania wynikowego komunikatu odpowiedzi. Element IHttpActionResult można zwrócić z dowolnej akcji internetowego interfejsu API, aby uprościć testowanie jednostkowe implementacji internetowego interfejsu API. Dla wygody dostępnych jest wiele implementacji IHttpActionResult, w tym wyniki dotyczące zwracania określonych kodów stanu, sformatowanej zawartości lub odpowiedzi wynegocjowanych przez zawartość.

HttpRequestContext

Nowy obiekt HttpRequestContext śledzi wszystkie stany powiązane z żądaniem, ale nie są natychmiast dostępne w żądaniu. Na przykład można użyć obiektu HttpRequestContext do pobrania danych trasy, podmiotu zabezpieczeń skojarzonego z żądaniem, certyfikatu klienta, elementu UrlHelper i katalogu głównego ścieżki wirtualnej. Można łatwo utworzyć obiekt HttpRequestContext na potrzeby testowania jednostkowego.

Ponieważ podmiot zabezpieczeń żądania jest przepływany z żądaniem zamiast polegać na Thread.CurrentPrincipal, podmiot zabezpieczeń jest teraz dostępny przez cały okres istnienia żądania, gdy znajduje się w potoku internetowego interfejsu API.

CORS

Dzięki innemu wspaniałemu wkładowi Brock Allen, ASP.NET teraz w pełni obsługuje współużytkowanie żądań między źródłami (CORS).

Zabezpieczenia przeglądarki uniemożliwiają stronie internetowej wysyłanie żądań AJAX do innej domeny. CORS to standard W3C, który umożliwia serwerowi złagodzenie zasad tego samego źródła. Przy użyciu mechanizmu CORS serwer może jawnie zezwalać na niektóre żądania między źródłami, jednocześnie odrzucając inne.

Internetowy interfejs API 2 obsługuje teraz mechanizm CORS, w tym automatyczną obsługę żądań wstępnych. Aby uzyskać więcej informacji, zobacz Enabling Cross-Origin Requests in ASP.NET Web API (Włączanie żądań między źródłami w interfejsie API sieci Web ASP.NET).

Filtry uwierzytelniania

Filtry uwierzytelniania to nowy rodzaj filtru w ASP.NET internetowym interfejsie API, który jest uruchamiany przed filtrami autoryzacji w potoku ASP.NET internetowego interfejsu API i umożliwia określenie logiki uwierzytelniania dla poszczególnych akcji, kontrolerów lub globalnie dla wszystkich kontrolerów. Filtry uwierzytelniania przetwarzają poświadczenia w żądaniu i dostarczają odpowiedniego podmiotu zabezpieczeń. Filtry uwierzytelniania mogą również dodawać wyzwania związane z uwierzytelnianiem w odpowiedzi na nieautoryzowane żądania.

Przesłonięcia filtrów

Teraz można zastąpić filtry stosowane do danej metody akcji lub kontrolera, określając filtr przesłonięcia. Przesłonięcia filtrów określają zestaw typów filtrów, które nie powinny być uruchamiane dla danego zakresu (akcja lub kontroler). Umożliwia to dodawanie filtrów globalnych, ale następnie wykluczanie niektórych z określonych akcji lub kontrolerów.

Integracja OWIN

ASP.NET internetowy interfejs API obsługuje teraz w pełni interfejs OWIN i można go uruchomić na dowolnym hoście obsługującym protokół OWIN. Jest to również element HostAuthenticationFilter , który zapewnia integrację z systemem uwierzytelniania OWIN.

Dzięki integracji OWIN możesz samodzielnie hostować internetowy interfejs API we własnym procesie wraz z innym oprogramowaniem pośredniczącym OWIN, takim jak SignalR. Aby uzyskać więcej informacji, zobacz Używanie interfejsu OWIN do Self-Host ASP.NET internetowego interfejsu API.

ASP.NET SignalR 2.0

W poniższych sekcjach opisano funkcje usługi SignalR 2.0.

Aby zapoznać się z przykładem uaktualniania istniejącego projektu 1.x do usługi SignalR 2.0, zobacz Uaktualnianie projektu SignalR 1.x.

Oparty na OWIN

SignalR 2.0 jest całkowicie zbudowany na OWIN (Open Web Interface for .NET). Ta zmiana sprawia, że proces konfiguracji usługi SignalR jest znacznie bardziej spójny między aplikacjami SignalR hostowanymi w Internecie i własnymi aplikacjami SignalR, ale wymaga również wielu zmian interfejsu API.

MapHubs i MapConnection są teraz MapSignalR

W celu zachowania zgodności ze standardami OWIN te metody zostały zmienione na MapSignalR. MapSignalR wywoływane bez parametrów mapuje wszystkie koncentratory (podobnie jak MapHubs w wersji 1.x); aby zamapować poszczególne obiekty PersistentConnection , określić typ połączenia jako parametr typu i rozszerzenie adresu URL dla połączenia jako pierwszy argument.

Metoda jest wywoływana MapSignalR w klasie uruchamiania Owin. Visual Studio 2013 zawiera nowy szablon dla klasy startowej Owin. Aby użyć tego szablonu, wykonaj następujące czynności:

  1. Kliknij prawym przyciskiem myszy projekt
  2. Wybierz pozycję Dodaj, Nowy element...
  3. Wybierz pozycję Owin Startup class (Klasa początkowa Owin). Nadaj nowej klasie nazwę Startup.cs.

W aplikacji internetowej klasa uruchamiania Owin zawierająca MapSignalR metodę jest następnie dodawana do procesu uruchamiania Owina przy użyciu wpisu w węźle ustawień aplikacji pliku Web.Config, jak pokazano poniżej.

W aplikacji hostowanej samodzielnie klasa Startup jest przekazywana jako parametr WebApp.Start typu metody.

Mapowanie koncentratorów i połączeń w usłudze SignalR 1.x (z pliku aplikacji globalnej w aplikacji internetowej):

protected void Application_Start(object sender, EventArgs e) 
{
    // Map all hubs to "/signalr"
    RouteTable.Routes.MapHubs();
    // Map the Echo PersistentConnection to "/echo"
    RouteTable.Routes.MapConnection<myconnection>("echo", "/echo");
}

Mapowanie koncentratorów i połączeń w usłudze SignalR 2.0 (z pliku klasy startowej Owin):

using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(MyWebApplication.Startup))]

namespace MyWebApplication
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Map all hubs to "/signalr"
            app.MapSignalR();
            // Map the Echo PersistentConnection to "/echo"
            app.MapSignalR<echoconnection>("/echo");
        }
    }
}

W aplikacji hostowanej samodzielnie klasa Startup jest przekazywana jako parametr typu dla WebApp.Start metody, jak pokazano poniżej.

string url = "http://localhost:8080";
using (WebApp.Start<startup>(url))
{
    Console.WriteLine("Server running on {0}", url);
    Console.ReadLine();
}

Obsługa wielu domen

W usłudze SignalR 1.x żądania między domenami były kontrolowane przez jedną flagę EnableCrossDomain. Ta flaga steruje żądaniami JSONP i CORS. Aby uzyskać większą elastyczność, obsługa mechanizmu CORS została usunięta ze składnika serwera usługi SignalR (klienci JavaScript nadal używają mechanizmu CORS zwykle w przypadku wykrycia, że przeglądarka ją obsługuje), a nowe oprogramowanie pośredniczące OWIN zostało udostępnione do obsługi tych scenariuszy.

W usłudze SignalR 2.0, jeśli na kliencie jest wymagany protokół JSONP (do obsługi żądań między domenami w starszych przeglądarkach), należy jawnie włączyć tę funkcję, ustawiając dla HubConfiguration obiektu truewartość EnableJSONP , jak pokazano poniżej. Protokół JSONP jest domyślnie wyłączony, ponieważ jest mniej bezpieczny niż MECHANIZM CORS.

Aby dodać nowe oprogramowanie pośredniczące CORS w usłudze SignalR 2.0, dodaj bibliotekę Microsoft.Owin.Cors do projektu i wywołaj UseCors przed oprogramowaniem pośredniczącym SignalR, jak pokazano w poniższej sekcji.

Dodawanie pliku Microsoft.Owin.Cors do projektu: Aby zainstalować tę bibliotekę, uruchom następujące polecenie w konsoli menedżera pakietów:

Install-Package Microsoft.Owin.Cors

To polecenie spowoduje dodanie do projektu wersji 2.0.0 pakietu.

Wywoływanie obiektów UseCor

Poniższe fragmenty kodu pokazują, jak zaimplementować połączenia między domenami w usługach SignalR 1.x i 2.0.

Implementowanie żądań między domenami w usłudze SignalR 1.x (z pliku aplikacji globalnej)

protected void Application_Start(object sender, EventArgs e) 
{
    var hubConfiguration = new HubConfiguration();
    hubConfiguration.EnableCrossDomain = true;
    RouteTable.Routes.MapHubs(hubConfiguration);
}

Implementowanie żądań między domenami w usłudze SignalR 2.0 (z pliku kodu C#)

Poniższy kod pokazuje, jak włączyć mechanizm CORS lub JSONP w projekcie SignalR 2.0. Ten przykładowy kod używa elementów Map i RunSignalR zamiast MapSignalR, dzięki czemu oprogramowanie pośredniczące CORS jest uruchamiane tylko dla żądań usługi SignalR, które wymagają obsługi mechanizmu CORS (zamiast całego ruchu w ścieżce określonej w MapSignalRelemencie ). Map Można również użyć dla dowolnego innego oprogramowania pośredniczącego, które musi być uruchamiane dla określonego prefiksu adresu URL, a nie dla całej aplikacji.

using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Cors;
using Owin;

[assembly: OwinStartup(typeof(MyWebApplication.Startup))]

namespace MyWebApplication
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Branch the pipeline here for requests that start with "/signalr"
            app.Map("/signalr", map =>
            {
                // Setup the CORS middleware to run before SignalR.
                // By default this will allow all origins. You can 
                // configure the set of origins and/or http verbs by
                // providing a cors options with a different policy.
                map.UseCors(CorsOptions.AllowAll);
                var hubConfiguration = new HubConfiguration 
                {
                    // You can enable JSONP by uncommenting line below.
                    // JSONP requests are insecure but some older browsers (and some
                    // versions of IE) require JSONP to work cross domain
                    // EnableJSONP = true
                };
                // Run the SignalR pipeline. We're not using MapSignalR
                // since this branch already runs under the "/signalr"
                // path.
                map.RunSignalR(hubConfiguration);
            });
        }
    }
}

Obsługa systemów iOS i Android za pośrednictwem rozwiązań MonoTouch i MonoDroid

Dodano obsługę klientów systemów iOS i Android przy użyciu składników MonoTouch i MonoDroid z biblioteki Xamarin. Aby uzyskać więcej informacji na temat korzystania z nich, zobacz Using Xamarin Components (Korzystanie ze składników platformy Xamarin). Te składniki będą dostępne w sklepie Xamarin Store , gdy jest dostępna wersja RTW usługi SignalR.

### Przenośny klient .NET

Aby lepiej ułatwić programowanie międzyplatformowe, klienci Silverlight, WinRT i Windows Phone zostali zastąpieni jednym przenośnym klientem platformy .NET obsługującym następujące platformy:

  • NET 4.5
  • Program Silverlight 5
  • WinRT (.NET dla aplikacji ze Sklepu Windows)
  • Windows Phone 8

Nowy pakiet Self-Host

Pakiet NuGet ułatwia rozpoczęcie pracy z usługą SignalR Self-Host (aplikacje SignalR hostowane w procesie lub innej aplikacji, a nie hostowane na serwerze internetowym). Aby uaktualnić projekt samodzielnego hosta skompilowany przy użyciu biblioteki SignalR 1.x, usuń pakiet Microsoft.AspNet.SignalR.Owin i dodaj pakiet Microsoft.AspNet.SignalR.SelfHost. Aby uzyskać więcej informacji na temat rozpoczynania pracy z pakietem self-host, zobacz Samouczek: Samodzielny host usługi SignalR.

Obsługa serwera zgodnego z poprzednimi wersjami

W poprzednich wersjach usługi SignalR wersje pakietu SignalR używanego w kliencie i serwerze muszą być identyczne. W celu obsługi grubych aplikacji klienckich, które byłyby trudne do zaktualizowania, usługa SignalR 2.0 obsługuje teraz korzystanie z nowszej wersji serwera ze starszym klientem. Uwaga: Usługa SignalR 2.0 nie obsługuje serwerów skompilowanych ze starszymi wersjami z nowszymi klientami.

Usunięto obsługę serwera dla platformy .NET 4.0

Usługa SignalR 2.0 obniżyła obsługę współdziałania serwera z platformą .NET 4.0. Platforma .NET 4.5 musi być używana z serwerami SignalR 2.0. Nadal istnieje klient platformy .NET 4.0 dla usługi SignalR 2.0.

Wysyłanie komunikatu do listy klientów i grup

W usłudze SignalR 2.0 można wysłać komunikat przy użyciu listy identyfikatorów klientów i grup. Poniższe fragmenty kodu pokazują, jak to zrobić.

Wysyłanie komunikatu do listy klientów i grup przy użyciu elementu PersistentConnection

using Microsoft.AspNet.SignalR;
using System.Collections.Generic;
public class ChatConnection : PersistentConnection
{
    static List<string> ConnectionIds = new List<string>();
    static List<string> groups = new List<string>{"chatGroup", "chatGroup2"};
    protected override System.Threading.Tasks.Task OnReceived(IRequest request, string connectionId, string data)
    {
        Connection.Send(ConnectionIds, data);
        Groups.Send(groups, data);
        return base.OnReceived(request, connectionId, data);
    }
    protected override System.Threading.Tasks.Task OnConnected(IRequest request, string connectionId)
    {
        ConnectionIds.Add(connectionId);
        Groups.Add(connectionId, "chatGroup");
        return base.OnConnected(request, connectionId);
    }
    protected override System.Threading.Tasks.Task OnDisconnected(IRequest request, string connectionId)
    {
        ConnectionIds.Remove(connectionId);
        return base.OnDisconnected(request, connectionId);
    }
}

Wysyłanie komunikatu do listy klientów i grup przy użyciu usługi Hubs

using Microsoft.AspNet.SignalR;
using System.Collections.Generic;
public class ChatHub : Hub
{
    static List<string> ConnectionIds = new List<string>();
    static List<string> groups = new List<string> { "chatGroup", "chatGroup2" };
    public void Send(string name, string message)
    {
        // Call the broadcastMessage method to update clients.
        Clients.Clients(ConnectionIds).broadcastMessage(name, message);
        Clients.Groups(groups).broadcastMessage(name, message);
    }
    public override System.Threading.Tasks.Task OnConnected()
    {
        ConnectionIds.Add(Context.ConnectionId);
        Groups.Add(Context.ConnectionId, "chatGroup");
        return base.OnConnected();
    }
    public override System.Threading.Tasks.Task OnDisconnected()
    {
        ConnectionIds.Remove(Context.ConnectionId);
        return base.OnDisconnected();
    }
}

Wysyłanie wiadomości do określonego użytkownika

Ta funkcja umożliwia użytkownikom określenie identyfikatora userId na podstawie elementu IRequest za pośrednictwem nowego interfejsu IUserIdProvider:

Interfejs IUserIdProvider

public interface IUserIdProvider
{
    string GetUserId(IRequest request);
}

Domyślnie będzie istnieć implementacja, która używa IPrincipal.Identity.Name użytkownika jako nazwy użytkownika.

W centrach będziesz mieć możliwość wysyłania komunikatów do tych użytkowników za pośrednictwem nowego interfejsu API:

Korzystanie z interfejsu API Clients.User

public class MyHub : Hub
{
    public void Send(string userId, string message)
    {
        Clients.User(userId).send(message);
    }
}

Lepsza obsługa błędów

Użytkownicy mogą teraz zgłaszać wyjątek HubException z dowolnego wywołania centrum. Konstruktor obiektu HubException może przyjąć komunikat ciągu i dodatkowe dane o błędzie obiektu. Usługa SignalR automatycznie serializuje wyjątek i wysyła go do klienta, na którym zostanie użyty do odrzucenia/niepowodzenia wywołania metody koncentratora.

Pokaż szczegółowe ustawienie wyjątków koncentratora nie ma wpływu na wysyłanie wyjątków HubException z powrotem do klienta lub nie; jest ona zawsze wysyłana.

Kod po stronie serwera demonstrujący wysyłanie elementu HubException do klienta

public class MyHub : Hub
{
    public void Send(string message)
    {
        if(message.Contains("<script>"))
        {
            throw new HubException("This message will flow to the client", new { user = Context.User.Identity.Name, message = message });
        }

        Clients.All.send(message);
    }
}

Kod klienta JavaScript demonstrujący reagowanie na wyjątek HubException wysłany z serwera

myHub.server.send("<script>")
            .fail(function (e) {
                if (e.source === 'HubException') {
                    console.log(e.message + ' : ' + e.data.user);
                }
            });

Kod klienta platformy .NET demonstrujący reagowanie na wyjątek HubException wysłany z serwera

try
{
    await myHub.Invoke("Send", "<script>");
}
catch(HubException ex)
{
    Conosle.WriteLine(ex.Message);
}

Łatwiejsze testowanie jednostkowe koncentratorów

Usługa SignalR 2.0 zawiera interfejs wywoływany IHubCallerConnectionContext w centrach, który ułatwia tworzenie pozornych wywołań po stronie klienta. Poniższe fragmenty kodu pokazują użycie tego interfejsu z popularnymi uprzężami testowymi xUnit.net i moq.

Testowanie jednostkowe usługi SignalR za pomocą xUnit.net

[Fact]
public void HubsAreMockableViaDynamic()
{
    bool sendCalled = false;
    var hub = new MyHub();
    var mockClients = new Mock<IHubCallerConnectionContext>();
    hub.Clients = mockClients.Object;
    dynamic all = new ExpandoObject();
    all.send = new Action<string>(message =>
    {
        sendCalled = true;
    });
    mockClients.Setup(m => m.All).Returns((ExpandoObject)all);
    hub.Send("foo");
    Assert.True(sendCalled);
}

Testowanie jednostkowe SignalR za pomocą narzędzia moq

[Fact]
public interface IClientContract
{
    void send(string message);
}
public void HubsAreMockableViaType()
{
    var hub = new MyHub();
    var mockClients = new Mock<IHubCallerConnectionContext>();
    var all = new Mock<IClientContract>();
    hub.Clients = mockClients.Object;
    all.Setup(m => m.send(It.IsAny<string>())).Verifiable();
    mockClients.Setup(m => m.All).Returns(all.Object);
    hub.Send("foo");
    all.VerifyAll();

Obsługa błędów języka JavaScript

W usłudze SignalR 2.0 wszystkie błędy języka JavaScript obsługujące wywołania zwrotne zwracają obiekty błędów JavaScript zamiast nieprzetworzonych ciągów. Dzięki temu usługa SignalR może przepływać bogatsze informacje do procedur obsługi błędów. Wewnętrzny wyjątek można uzyskać od source właściwości błędu.

Kod klienta JavaScript obsługujący wyjątek Start.Fail

connection.start().fail(function(e) {
    console.log('The error is: ' + e.message);
});

ASP.NET Identity

Nowy system członkostwa ASP.NET

ASP.NET Identity to nowy system członkostwa dla aplikacji ASP.NET. ASP.NET Identity ułatwia integrowanie danych profilu specyficznego dla użytkownika z danymi aplikacji. ASP.NET Identity umożliwia również wybranie modelu trwałości dla profilów użytkowników w aplikacji. Dane można przechowywać w bazie danych SQL Server lub innym magazynie danych, w tym w magazynach danych NoSQL, takich jak tabele usługi Azure Storage. Aby uzyskać więcej informacji, zobacz Indywidualne konta użytkowników w temacie Tworzenie projektów internetowych ASP.NET w Visual Studio 2013.

Uwierzytelnianie oparte na oświadczeniach

ASP.NET obsługuje teraz uwierzytelnianie oparte na oświadczeniach, gdzie tożsamość użytkownika jest reprezentowana jako zestaw oświadczeń od zaufanego wystawcy. Użytkownicy mogą być uwierzytelniani przy użyciu nazwy użytkownika i hasła przechowywanego w bazie danych aplikacji lub przy użyciu dostawców tożsamości społecznościowych (na przykład: konta Microsoft, Facebook, Google, Twitter) lub konta organizacyjne za pośrednictwem usługi Azure Active Directory lub Active Directory Federation Services (ADFS).

Integracja z usługą Azure Active Directory i Windows Server Active Directory

Teraz można tworzyć projekty ASP.NET, które używają usługi Azure Active Directory lub Windows Server Active Directory (AD) do uwierzytelniania. Aby uzyskać więcej informacji, zobacz Konta organizacyjne w temacie Tworzenie projektów sieci Web ASP.NET w Visual Studio 2013.

Integracja OWIN

ASP.NET uwierzytelnianie jest teraz oparte na oprogramowaniu pośredniczącym OWIN, które może być używane na dowolnym hoście opartym na protokole OWIN. Aby uzyskać więcej informacji na temat OWIN, zobacz następującą sekcję Składniki OWIN firmy Microsoft .

Składniki OWIN firmy Microsoft

Open Web Interface for .NET (OWIN) definiuje abstrakcję między serwerami internetowymi platformy .NET i aplikacjami internetowymi. OWIN rozdziela aplikację internetową z serwera, dzięki czemu aplikacje internetowe są niezależne od hosta. Można na przykład hostować aplikację internetową opartą na protokole OWIN w usługach IIS lub samodzielnie hostować ją w procesie niestandardowym.

Zmiany wprowadzone w składnikach OWIN firmy Microsoft (nazywanych również projektem Katana) obejmują nowe składniki serwera i hosta, nowe biblioteki pomocnika i oprogramowanie pośredniczące oraz nowe oprogramowanie pośredniczące uwierzytelniania.

Aby uzyskać więcej informacji na temat OWIN i Katana, zobacz Co nowego w OWIN i Katana.

Uwaga: aplikacje OWIN nie mogą działać w trybie klasycznym usług IIS; muszą być uruchamiane w trybie zintegrowanym.

Uwaga: aplikacje OWIN muszą być uruchamiane w pełnym zaufaniu.

Nowe serwery i hosty

W tej wersji dodano nowe składniki, aby umożliwić scenariusze samodzielnego hostowania. Te składniki obejmują następujące pakiety NuGet:

  • Microsoft.Owin.Host.HttpListener. Udostępnia serwer OWIN, który używa elementu HttpListener do nasłuchiwania żądań HTTP i kierowania ich do potoku OWIN.
  • Microsoft.Owin.Hosting udostępnia bibliotekę dla deweloperów, którzy chcą samodzielnie hostować potok OWIN w procesie niestandardowym, takim jak aplikacja konsolowa lub usługa systemu Windows.
  • OwinHost. Zapewnia autonomiczny plik wykonywalny, który opakowuje Microsoft.Owin.Hosting i umożliwia samodzielne hostowanie potoku OWIN bez konieczności pisania niestandardowej aplikacji hosta.

Ponadto Microsoft.Owin.Host.SystemWeb pakiet umożliwia teraz oprogramowanie pośredniczące do przekazywania wskazówek do serwera SystemWeb , wskazując, że oprogramowanie pośredniczące powinno być wywoływane podczas określonego etapu potoku ASP.NET. Ta funkcja jest szczególnie przydatna w przypadku oprogramowania pośredniczącego uwierzytelniania, które powinno działać na początku potoku ASP.NET.

Biblioteki pomocnika i oprogramowanie pośredniczące

Mimo że składniki OWIN można pisać tylko przy użyciu definicji funkcji i typów ze specyfikacji OWIN, nowy Microsoft.Owin pakiet zapewnia bardziej przyjazny dla użytkownika zestaw abstrakcji. Ten pakiet łączy kilka wcześniejszych pakietów (np. Owin.Extensions, Owin.Types) w jeden, dobrze ustrukturyzowany model obiektów, który może być następnie łatwo używany przez inne składniki OWIN. W rzeczywistości większość składników OWIN firmy Microsoft używa teraz tego pakietu.

Uwaga

Aplikacje OWIN nie mogą działać w trybie klasycznym usług IIS; muszą być uruchamiane w trybie zintegrowanym.

Uwaga

Aplikacje OWIN muszą być uruchamiane w pełnym zaufaniu.

Ta wersja zawiera również pakiet Microsoft.Owin.Diagnostics, który zawiera oprogramowanie pośredniczące do sprawdzania poprawności uruchomionej aplikacji OWIN oraz oprogramowanie pośredniczące na stronie błędów, aby ułatwić badanie błędów.

Składniki uwierzytelniania

Dostępne są następujące składniki uwierzytelniania.

  • Microsoft.Owin.Security.ActiveDirectory. Umożliwia uwierzytelnianie przy użyciu usług katalogowych lokalnych lub opartych na chmurze.
  • Microsoft.Owin.Security.Cookies umożliwia uwierzytelnianie przy użyciu plików cookie. Ten pakiet miał wcześniej nazwę Microsoft.Owin.Security.Forms.
  • Microsoft.Owin.Security.Facebook umożliwia uwierzytelnianie przy użyciu usługi OAuth firmy Facebook.
  • Microsoft.Owin.Security.Google włącza uwierzytelnianie przy użyciu usługi OpenID firmy Google.
  • Microsoft.Owin.Security.Jwt włącza uwierzytelnianie przy użyciu tokenów JWT.
  • Microsoft.Owin.Security.MicrosoftAccount umożliwia uwierzytelnianie przy użyciu kont Microsoft.
  • Microsoft.Owin.Security.OAuth. Udostępnia serwer autoryzacji OAuth oraz oprogramowanie pośredniczące do uwierzytelniania tokenów elementu nośnego.
  • Microsoft.Owin.Security.Twitter włącza uwierzytelnianie przy użyciu usługi OAuth w usłudze Twitter.

Ta wersja zawiera Microsoft.Owin.Cors również pakiet zawierający oprogramowanie pośredniczące do przetwarzania żądań HTTP między źródłami.

Uwaga

Obsługa podpisywania JWT została usunięta w ostatecznej wersji Visual Studio 2013.

Entity Framework 6

Aby uzyskać listę nowych funkcji i innych zmian w programie Entity Framework 6, zobacz Historia wersji programu Entity Framework.

ASP.NET Razor 3

ASP.NET Razor 3 zawiera następujące nowe funkcje:

  • Obsługa edytowania kart. Wcześniej polecenie Formatuj dokument , automatyczne wcięcie i automatyczne formatowanie w programie Visual Studio nie działało poprawnie podczas korzystania z opcji Zachowaj karty . Ta zmiana poprawia formatowanie programu Visual Studio dla kodu Razor na potrzeby formatowania tabulacji.
  • Obsługa reguł ponownego zapisywania adresów URL podczas generowania linków.
  • Usunięcie atrybutu przezroczystego zabezpieczeń.

    Uwaga

    Jest to zmiana powodująca niezgodność i sprawia, że platforma Razor 3 jest niezgodna z mvC4 i wcześniejszymi wersjami, podczas gdy składnia Razor 2 jest niezgodna z mvC5 lub zestawami skompilowanymi na MVC5.

=======

zawieszenie aplikacji ASP.NET

ASP.NET App Suspend to funkcja zmieniająca grę w .NET Framework 4.5.1, która radykalnie zmienia środowisko użytkownika i model ekonomiczny na potrzeby hostowania dużej liczby witryn ASP.NET na jednej maszynie. Aby uzyskać więcej informacji, zobacz ASP.NET App Suspend — dynamiczny udostępniony hosting internetowy platformy .NET.

Znane problemy i zmiany powodujące niezgodność

W tej sekcji opisano znane problemy i zmiany powodujące niezgodność w ASP.NET and Web Tools dla Visual Studio 2013.

NuGet

  • Nowe przywracanie pakietu nie działa na platformie Mono w przypadku korzystania z pliku SLN — zostanie naprawiona w nadchodzącym nuget.exe pobierania i aktualizacji pakietu NuGet.CommandLine .
  • Nowe przywracanie pakietów nie działa z projektami Wix — zostanie naprawiona w nadchodzącym nuget.exe pobierania i aktualizacji pakietu NuGet.CommandLine .

ASP.NET Web API

  1. ODataQueryOptions<T>.ApplyTo(IQueryable) funkcja nie zwraca IQueryable<T> zawsze, ponieważ dodaliśmy obsługę parametrów $select i $expand.

    Nasze wcześniejsze próbki dla ODataQueryOptions<T> zawsze rzutowali wartość zwracaną z ApplyTo do .IQueryable<T> Wcześniej zadziałało to, ponieważ opcje zapytania, które obsługiwaliśmy wcześniej ($filter, $orderby, $skip, ), $topnie zmieniają kształtu zapytania. Teraz, gdy obsługujemy $select i $expand zwracaną wartość z ApplyTo nie zawsze będzie IQueryable<T> .

    // Sample ODataQueryOptions<T> usage from earlier
    public IQueryable<Customer> Get(ODataQueryOptions<Customer> query)
    {
        IQueryable<customer> result="query.ApplyTo(_customers)" as iqueryable<customer>; return result;
    }
    

    Jeśli używasz przykładowego kodu z wcześniejszego kodu, będzie on nadal działać, jeśli klient nie wysyła $select i $expand. Jeśli jednak chcesz obsługiwać $select ten kod i $expand musisz go zmienić.

    public IHttpActionResult Get(ODataQueryOptions<Customer> query)
    {
        IQueryable result = query.ApplyTo(_customers);
        return Ok(result, result.GetType());
    }
     
    private IHttpActionResult Ok(object content, Type type)
    {
        Type resultType = typeof(OkNegotiatedContentResult<>).MakeGenericType(type);
        return Activator.CreateInstance(resultType, content, this) as IHttpActionResult;
    }
    
  2. Request.Url lub RequestContext.Url ma wartość null podczas żądania wsadowego

    W scenariuszu przetwarzania wsadowego element UrlHelper ma wartość null w przypadku uzyskiwania dostępu do adresu Request.Url lub RequestContext.Url.

    Obejściem tego problemu jest utworzenie nowego wystąpienia elementu UrlHelper, jak pokazano w poniższym przykładzie:

    Tworzenie nowego wystąpienia elementu UrlHelper

    if (RequestContext.Url == null)
    {
        RequestContext.Url = new UrlHelper(Request);
    }
    

ASP.NET MVC

  1. W przypadku korzystania z protokołu MVC5 i OrgAuth, jeśli masz widoki, które wykonują walidację narzędzia AntiForgerToken, podczas publikowania danych w widoku może wystąpić następujący błąd:

    Błąd:

    Błąd serwera w aplikacji "/".

    Oświadczenie typu http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier lub https://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider nie było obecne w podanym oświadczeńIdentity. Aby włączyć obsługę tokenu chroniącego przed fałszertwem z uwierzytelnianiem opartym na oświadczeniach, sprawdź, czy skonfigurowany dostawca oświadczeń udostępnia oba te oświadczenia w wystąpieniach ClaimsIdentity, które generuje. Jeśli skonfigurowany dostawca oświadczeń używa innego typu oświadczenia jako unikatowego identyfikatora, można go skonfigurować, ustawiając właściwość statyczną AntiForgeryConfig.UniqueClaimTypeIdentifier.

    Obejście:

    Dodaj następujący wiersz w pliku Global.asax, aby go naprawić:

    AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;

    Zostanie to naprawione dla następnej wersji.

  2. Po uaktualnieniu aplikacji MVC4 do mvC5 skompiluj rozwiązanie i uruchom je. Powinien zostać wyświetlony następujący błąd:

    [A] Nie można rzutować elementu System.Web.WebPages.Razor.Configuration.HostSection na element [B]System.Web.WebPages.Razor.Configuration.HostSection. Typ A pochodzi z elementu "System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" w kontekście "Default" w lokalizacji "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll". Typ B pochodzi z "System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" w kontekście "Default" w lokalizacji "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\6d05bbd0\e8b5908e\assembly\dl3\c9cbca63\f8910382_6273ce01\System.Web.WebPages.Razor.dll".

    Aby naprawić powyższy błąd, otwórz wszystkie pliki Web.config (w tym te w folderze Views) w projekcie i wykonaj następujące czynności:

    1. Zaktualizuj wszystkie wystąpienia wersji "4.0.0.0" "System.Web.Mvc" do "5.0.0.0".0".

    2. Zaktualizuj wszystkie wystąpienia wersji "2.0.0.0" "System.Web.Helpers", "System.Web.WebPages" i "System.WebPages.Razor" na "3.0.0.0".

      Na przykład po wprowadzeniu powyższych zmian powiązania zestawów powinny wyglądać następująco:

      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      

      Aby uzyskać informacje na temat uaktualniania projektów MVC 4 do mvC 5, zobacz Jak uaktualnić ASP.NET MVC 4 i projekt internetowego interfejsu API do ASP.NET MVC 5 i internetowego interfejsu API 2.

  3. W przypadku korzystania z walidacji po stronie klienta z weryfikacją nieuprawnią w trybie jQuery komunikat weryfikacji jest czasami niepoprawny dla elementu wejściowego HTML o typie='number'. Błąd weryfikacji wymaganej wartości ("Pole Wiek jest wymagany") jest wyświetlany, gdy wprowadzono nieprawidłową liczbę zamiast poprawnego komunikatu, że wymagana jest prawidłowa liczba.

    Ten problem występuje często w przypadku kodu szkieletowego dla modelu z właściwością całkowitą w widokach Tworzenie i edytowanie.

    Aby obejść ten problem, zmień pomocnika edytora na:

    @Html.EditorFor(person => person.Age)

    Do:

    @Html.TextBoxFor(person => person.Age)

  4. ASP.NET MVC 5 nie obsługuje już częściowego zaufania. Projekty łączące się z plikami binarnymi MVC lub WebAPI powinny usunąć atrybut SecurityTransparent i atrybut AllowPartiallyTrustedCallers . Usunięcie tych atrybutów spowoduje wyeliminowanie błędów kompilatora, takich jak następujące.

    Attempt by security transparent method ‘MyComponent' to access security critical type 'System.Web.Mvc.MvcHtmlString' failed. Assembly 'PagedList.Mvc, Version=4.3.0.0, Culture=neutral, PublicKeyToken=abbb863e9397c5e1' is marked with the AllowPartiallyTrustedCallersAttribute, and uses the level 2 security transparency model. Level 2 transparency causes all methods in AllowPartiallyTrustedCallers assemblies to become security transparent by default, which may be the cause of this exception.

    Należy pamiętać, że w tej samej aplikacji nie można używać zestawów 4.0 i 5.0. Należy zaktualizować wszystkie z nich do wersji 5.0.

Szablon SPA z autoryzacją serwisu Facebook może spowodować niestabilność programu IE, gdy witryna internetowa jest hostowana w strefie intranetowej

Szablon SPA zapewnia zewnętrzne logowanie w serwisie Facebook. Gdy projekt utworzony przy użyciu szablonu jest uruchomiony lokalnie, logowanie może spowodować awarię programu IE.

Rozwiązanie:

  1. Hostowanie witryny internetowej w strefie internetowej; Lub

  2. Przetestuj scenariusz w przeglądarce innej niż IE.

tworzenie szkieletów Web Forms

Web Forms szkielet został usunięty z programu VS2013 i będzie dostępny w przyszłej aktualizacji programu Visual Studio. Można jednak nadal używać szkieletu w projekcie Web Forms, dodając zależności MVC i generując szkielet dla MVC. Projekt będzie zawierać kombinację Web Forms i MVC.

Aby dodać mvC do projektu Web Forms, dodaj nowy element szkieletowy i wybierz pozycję Zależności MVC 5. Wybierz pozycję Minimalna lub Pełna w zależności od tego, czy potrzebujesz wszystkich plików zawartości, takich jak skrypty. Następnie dodaj element szkieletowy dla wzorca MVC, który utworzy widoki i kontroler w projekcie.

Szkielet interfejsu MVC i internetowego interfejsu API — http 404, nie znaleziono błędu

Jeśli podczas dodawania elementu szkieletowego do projektu wystąpi błąd, możliwe, że projekt pozostanie w stanie niespójnym. Niektóre wprowadzone zmiany zostaną wycofane, ale inne zmiany, takie jak zainstalowane pakiety NuGet, nie zostaną wycofane. Jeśli zmiany konfiguracji routingu zostaną wycofane, użytkownicy otrzymają błąd HTTP 404 podczas przechodzenia do elementów szkieletowych.

Obejście problemu:

  • Aby rozwiązać ten błąd dla wzorca MVC, dodaj nowy element szkieletowy i wybierz pozycję Zależności MVC 5 (minimalne lub pełne). Ten proces spowoduje dodanie wszystkich wymaganych zmian do projektu.

  • Aby rozwiązać ten błąd dla internetowego interfejsu API:

    1. Dodaj klasę WebApiConfig do projektu.

      public static class WebApiConfig
      {
          public static void Register(HttpConfiguration config)
          {
              config.MapHttpAttributeRoutes();
              config.Routes.MapHttpRoute(
                  name: "DefaultApi",
                  routeTemplate: "api/{controller}/{id}",
                  defaults: new { id = RouteParameter.Optional }
              );
          }
      }
      
      Public Module WebApiConfig
          Public Sub Register(ByVal config As HttpConfiguration)
              config.MapHttpAttributeRoutes()
              config.Routes.MapHttpRoute(
                name:="DefaultApi",
                routeTemplate:="api/{controller}/{id}",
                defaults:=New With {.id = RouteParameter.Optional}
              )
          End Sub
      End Module
      
    2. Skonfiguruj plik WebApiConfig.Register w metodzie Application_Start w pliku Global.asax w następujący sposób:

      public class WebApiApplication : System.Web.HttpApplication
      {
          protected void Application_Start()
          {
              GlobalConfiguration.Configure(WebApiConfig.Register);    
          }
      }
      
      Public Class WebApiApplication
           Inherits System.Web.HttpApplication
       
           Sub Application_Start()     
             GlobalConfiguration.Configure(AddressOf WebApiConfig.Register)       
           End Sub
      End Class