Rozszerzenie ASP.NET and Web Tools dla programu Visual Studio 2013 — informacje o wersji
autor: Microsoft
W tym dokumencie opisano wydanie narzędzi ASP.NET i Web Tools for Visual Studio 2013.
Zawartość
Nowe funkcje w narzędziach ASP.NET i Web Tools for Visual Studio 2013
- Jeden ASP.NET
- Nowe środowisko projektu internetowego
- tworzenie szkieletów ASP.NET
- Łączność z przeglądarkami
- Ulepszenia edytora sieci Web programu Visual Studio
- Obsługa aplikacji internetowych usługi aplikacja systemu Azure w programie Visual Studio
- Ulepszenia publikowania w Internecie
- NuGet 2.7
- ASP.NET Web Forms
- ASP.NET MVC 5
- ASP.NET internetowy interfejs API 2
- ASP.NET SignalR
- ASP.NET Identity
- Składniki OWIN firmy Microsoft
- Entity Framework 6
- ASP.NET Razor 3
- zawieszenie aplikacji ASP.NET
- Znane problemy i zmiany powodujące niezgodność
Uwagi dotyczące instalacji
narzędzia ASP.NET i Web Tools for Visual Studio 2013 są dołączone do głównego instalatora i można je pobrać tutaj.
Dokumentacja
Samouczki i inne informacje o narzędziach ASP.NET i Web Tools for Visual Studio 2013 są dostępne w witrynie internetowej ASP.NET.
Wymagania dotyczące oprogramowania
narzędzia ASP.NET i Web Tools wymagają programu Visual Studio 2013.
Nowe funkcje w narzędziach ASP.NET i Web Tools for Visual Studio 2013
W poniższych sekcjach opisano funkcje wprowadzone w wersji.
Jeden ASP.NET
Wraz z wydaniem programu Visual Studio 2013 wykonaliśmy krok w kierunku ujednolicenia doświadczeń korzystania z technologii ASP.NET, dzięki czemu można łatwo mieszać i dopasowywać te, które chcesz. Można na przykład rozpocząć projekt przy użyciu wzorca MVC i łatwo dodać strony web forms do projektu później lub utworzyć szkielet interfejsów API sieci Web w projekcie formularzy internetowych. 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 opierasz się na zaufanej podstawowej strukturze usługi One ASP.NET.
Nowe środowisko projektu internetowego
Ulepszyliśmy środowisko tworzenia nowych projektów internetowych w programie Visual Studio 2013. W oknie dialogowym Nowy projekt internetowy ASP.NET można wybrać odpowiedni typ projektu, skonfigurować dowolną kombinację technologii (Web Forms, MVC, Web API), skonfigurować opcje uwierzytelniania i dodać projekt testu jednostkowego.
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)
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. Ułatwia dodawanie kodu kociołowego 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. W programie Visual Studio 2013 można teraz używać szkieletu dla dowolnego projektu ASP.NET, w tym formularzy internetowych. Program Visual Studio 2013 nie obsługuje obecnie generowania stron dla projektu formularzy sieci Web, ale nadal można używać szkieletu z formularzami sieci Web przez dodanie zależności MVC do projektu. Obsługa generowania stron dla formularzy sieci Web zostanie dodana w przyszłej aktualizacji.
W przypadku korzystania z szkieletu 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 formularzy sieci Web, 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. Jeśli wybierzesz opcję 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 ASP.NET Omówienie tworzenia szkieletów.
Link przeglądarki — kanał SignalR między przeglądarką a programem Visual Studio
Nowa funkcja Link przeglądarki umożliwia łączenie wielu przeglądarek z programem Visual Studio i odświeżanie ich wszystkich, klikając przycisk na pasku narzędzi. Możesz połączyć wiele przeglądarek z witryną deweloperów, 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 umożliwiający deweloperom pisanie rozszerzeń linku przeglądarki.
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ą. Platforma Web Essentials korzysta z interfejsu API w celu utworzenia zintegrowanego środowiska między programem Visual Studio i narzędziami deweloperskich przeglądarki, zdalnym sterowaniem emulatorami urządzeń przenośnych i o wiele więcej.
Ulepszenia edytora sieci Web programu Visual Studio
Program 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, atrybut Grupowanie funkcji IntelliSense, identyfikator i nazwę klasy IntelliSense oraz inne ulepszenia, w tym lepszą wydajność, formatowanie i tagi SmartTags.
Poniższy zrzut ekranu przedstawia użycie funkcji IntelliSense atrybutu Bootstrap w edytorze HTML.
Program Visual Studio 2013 jest również wyposażony w wbudowane edytory CoffeeScript i LESS. Edytor LESS zawiera wszystkie fajne funkcje edytora CSS i ma specyficzną funkcję IntelliSense dla zmiennych i miesza we wszystkich dokumentach LESS w łańcuchu @import .
Obsługa aplikacji internetowych usługi aplikacja systemu Azure w programie Visual Studio
W programie 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 usługi aplikacja systemu Azure Service Web Apps działa również w programie Visual Studio 2012 podczas instalowania bieżącej wersji zestawu Azure SDK dla platformy .NET.
Aby uzyskać więcej informacji, zobacz następujące zasoby:
- Tworzenie aplikacji internetowej ASP.NET w usłudze aplikacja systemu Azure
- Rozwiązywanie problemów z aplikacją internetową w usłudze aplikacja systemu Azure przy użyciu programu Visual Studio
Ulepszenia publikowania w Internecie
Program Visual Studio 2013 zawiera nowe i ulepszone funkcje publikowania w sieci Web. Oto kilka z nich:
- Łatwe automatyzowanie szyfrowania plików Web.config. (Ten link i następujące dwa punkty dokumentacji w witrynie MSDN, które mogą być niedostępne do końca dnia 10/17).
- Łatwe automatyzowanie przełączania aplikacji w tryb offline podczas wdrażania.
- Skonfiguruj narzędzie Web Deploy, aby używać sumy kontrolnej plików zamiast daty ostatniej zmiany w celu określenia, które pliki mają być kopiowane na serwer.
- Szybkie publikowanie pojedynczych wybranych plików (w tym Web.config) podczas korzystania z metod publikowania protokołu FTP lub systemu plików, a także z narzędziem Web Deploy.
Aby uzyskać więcej informacji na temat wdrażania ASP.NET sieci Web, zobacz witrynę ASP.NET.
NuGet 2.7
Pakiet 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 usuwa 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 udzielane przez zainstalowanie narzędzia NuGet. Teraz przywracanie pakietu 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.
ASP.NET Identity
Szablony projektów Web Forms obsługują nową platformę ASP.NET Identity. Ponadto szablony obsługują teraz tworzenie projektu intranetowego formularzy internetowych.
Uruchomienie
Szablony formularzy internetowych używają narzędzia Bootstrap , aby zapewnić elegancki i dynamiczny wygląd i działanie, które można łatwo dostosować.
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źć w artykule Wprowadzenie do 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 w celu 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 na potrzeby uwierzytelniania i zarządzania tożsamościami. Samouczek przedstawiający uwierzytelnianie w serwisie Facebook i Google oraz nowy interfejs API członkostwa można znaleźć w artykule 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 aplikacja systemu Azure 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óry można łatwo dostosować.
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ę, na 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 (akcji lub kontrolera). 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 udziałowi Tima McCalla, autora http://attributerouting.net. Przy użyciu routingu atrybutów możesz 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 współtworzeniu przez Tima McCalla, autora 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. Na przykład można ł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 Azure Active Directory lub ADFS w systemie Windows Server 2012 R2.
Ulepszenia OData
Obsługa $select, $expand, $batch i $value
ASP.NET web API OData ma teraz pełną obsługę $select, $expand i $value. Można również użyć $batch na potrzeby 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 $expand w usłudze OData internetowego interfejsu API).
Ulepszona rozszerzalność
Formatery OData są teraz rozszerzalne. Możesz dodać metadane wpisu Atom, obsługiwać wpisy linków strumienia i multimediów, dodawać adnotacje wystąpień i dostosowywać sposób generowania łączy.
Obsługa bez wpisywania
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ć programu EDM, który kompiluje program 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.
- Spakuj wiele żądań do pojedynczego żą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 interfejsu API sieci Web ASP.NET do tworzenia przenośnych bibliotek klas, które działają w Sklepie Windows i aplikacjach systemu Windows Phone 8. 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 znacznie 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żesz zaimplementować metodę 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 wynegocjowanych odpowiedzi.
HttpRequestContext
Nowy element HttpRequestContext śledzi każdy stan powiązany z żądaniem, ale nie jest natychmiast dostępny z żądania. Na przykład możesz użyć obiektu HttpRequestContext , aby uzyskać dane trasy, podmiot zabezpieczeń skojarzony z żądaniem, certyfikat klienta, adres URLHelper i katalog główny ś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 kolejnemu 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 podczas odrzucania innych.
Internetowy interfejs API 2 obsługuje teraz mechanizm CORS, w tym automatyczną obsługę żądań wstępnych. Aby uzyskać więcej informacji, zobacz 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 działa przed filtrami autoryzacji w potoku ASP.NET internetowego interfejsu API i umożliwia określenie logiki uwierzytelniania dla poszczególnych akcji, na 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. Przesłonięcia filtry określają zestaw typów filtrów, które nie powinny być uruchamiane dla danego zakresu (akcji lub kontrolera). 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 OWIN i można go uruchomić na dowolnym hoście obsługującym protokół OWIN. Jest to również 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 innymi oprogramowaniem pośredniczącym OWIN, takim jak SignalR. Aby uzyskać więcej informacji, zobacz Używanie protokołu OWIN do samodzielnego hostowania ASP.NET internetowego interfejsu API.
ASP.NET SignalR 2.0
W poniższych sekcjach opisano funkcje usługi SignalR 2.0.
- Oparty na OWIN
- MapHubs i MapConnection są teraz MapSignalR
- Obsługa międzydomenowa
- Obsługa systemów iOS i Android za pośrednictwem usług MonoTouch i MonoDroid
- Przenośny klient .NET
- Nowy pakiet self-host
- Obsługa serwera zgodnego z poprzednimi wersjami
- Usunięto obsługę serwera dla platformy .NET 4.0
- Wysyłanie komunikatu do listy klientów i grup
- Wysyłanie wiadomości do określonego użytkownika
- Lepsza obsługa błędów
- Łatwiejsze testowanie jednostkowe koncentratorów
- Obsługa błędów w języku JavaScript
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
Usługa SignalR 2.0 jest całkowicie zbudowana na platformie 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, ale również wymagał 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. Program Visual Studio 2013 zawiera nowy szablon dla klasy startowej Owin; aby użyć tego szablonu, wykonaj następujące czynności:
- Kliknij prawym przyciskiem myszy projekt
- Wybierz pozycję Dodaj, Nowy element...
- Wybierz pozycję Owin Startup Class (Klasa uruchamiania 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 self-hosted 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 międzydomenowa
W usłudze SignalR 1.x żądania między domenami były kontrolowane przez jedną flagę EnableCrossDomain. Ta flaga sterowała żą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 Języka JavaScript nadal używają mechanizmu CORS normalnie, jeśli zostanie wykryta, że przeglądarka ją obsługuje), a nowe oprogramowanie pośredniczące OWIN zostało udostępnione do obsługi tych scenariuszy.
Jeśli usługa SignalR 2.0 jest wymagana na kliencie (w celu obsługi żądań między domenami w starszych przeglądarkach), należy ją jawnie włączyć, ustawiając EnableJSONP
dla HubConfiguration
obiektu true
wartość , 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żer pakietów:
Install-Package Microsoft.Owin.Cors
To polecenie spowoduje dodanie do projektu wersji 2.0.0 pakietu.
Wywoływanie funkcji UseCors
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 (a nie dla całego ruchu w ścieżce określonej w MapSignalR
elemencie ). 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 usług 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 (Używanie 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.
Aby lepiej ułatwić tworzenie aplikacji dla wielu platform, 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
- Silverlight 5
- WinRT (.NET dla aplikacji ze Sklepu Windows)
- Windows Phone 8
Nowy pakiet self-host
Pakiet NuGet ułatwia rozpoczęcie pracy z własnym hostem usługi SignalR (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żywane 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 spadł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 funkcji 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ędzie można wysyłać komunikaty 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 elementu 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, gdzie będzie używany do odrzucania/niepowodzenia wywołania metody koncentratora.
Ustawienie pokaż szczegółowe wyjątki koncentratora nie ma wpływu na wysyłanie wyjątku HubException z powrotem do klienta lub nie; zawsze jest wysyłane.
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 pokazujący, że odpowiada 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 pokazujący, że odpowiada 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 usługi 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 w języku JavaScript
W usłudze SignalR 2.0 wszystkie błędy obsługi wywołań zwrotnych języka JavaScript 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 programu SQL Server lub innym magazynie danych, w tym 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 programie 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: kont Microsoft, Facebook, Google, Twitter) lub kont organizacyjnych za pośrednictwem usługi Azure Active Directory lub Active Directory Federation Services (ADFS).
Integracja z usługami 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 internetowych ASP.NET w programie 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 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, co sprawia, że aplikacje internetowe są niezależne od hosta. Na przykład można hostować aplikację internetową opartą na protokole OWIN w usługach IIS lub samodzielnie hostować ją w procesie niestandardowym.
Zmiany wprowadzone w składnikach Microsoft OWIN (znanym również jako projekt 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 w celu włączenia scenariuszy samodzielnego hostowania. Te składniki obejmują następujące pakiety NuGet:
- Microsoft.Owin.Host.HttpListener. Udostępnia serwer OWIN, który używa narzędzia 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. Udostępnia 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 , co wskazuje, ż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
Chociaż 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 microsoft OWIN 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 w celu zweryfikowania uruchomionej aplikacji OWIN oraz oprogramowania pośredniczącego na stronie błędów w celu ułatwienia zbadania 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 lokalnych lub opartych na chmurze usług katalogowych.
- 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 umożliwia 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 umożliwia uwierzytelnianie przy użyciu usługi OAuth w usłudze Twitter.
Ta wersja zawiera Microsoft.Owin.Cors
również pakiet, który zawiera 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 programu Visual Studio 2013.
Entity Framework 6
Aby uzyskać listę nowych funkcji i innych zmian w programie Entity Framework 6, zobacz Entity Framework Version History (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 w celu 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 razor 3 jest niezgodny z MVC4 i wcześniejszymi wersjami, podczas gdy razor 2 jest niezgodny z MVC5 lub zestawami skompilowanymi na MVC5.
=======
zawieszenie aplikacji ASP.NET
ASP.NET App Suspend to funkcja zmieniająca grę w programie .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 jednym komputerze. Aby uzyskać więcej informacji, zobacz ASP.NET App Suspend — responsywny 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 narzędziach ASP.NET i Web Tools for Visual Studio 2013.
NuGet
- Przywracanie nowego pakietu nie działa na platformie Mono podczas korzystania z pliku SLN — zostanie naprawiona w nadchodzącym nuget.exe pobierania i aktualizacji pakietu NuGet.CommandLine.
- Przywracanie nowego pakietu nie działa z projektami Wix — zostanie naprawiona w nadchodzącym nuget.exe pobierania i aktualizacji pakietu NuGet.CommandLine.
ASP.NET Web API
ODataQueryOptions<T>.ApplyTo(IQueryable)
funkcja nie zwracaIQueryable<T>
zawsze, ponieważ dodaliśmy obsługę parametrów$select
i$expand
.Nasze wcześniejsze przykłady dla
ODataQueryOptions<T>
zawsze rzutowali wartość zwracaną zApplyTo
naIQueryable<T>
. To zadziałało wcześniej, ponieważ opcje zapytania obsługiwane wcześniej ($filter
,$orderby
,$skip
,$top
) nie zmieniają kształtu zapytania. Teraz, gdy obsługujemy$select
i$expand
zwracaną wartość zApplyTo
nie zawsze będzieIQueryable<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śniejszej wersji, będzie on nadal działać, jeśli klient nie wyśle
$select
polecenia 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; }
Request.Url lub RequestContext.Url ma wartość null podczas żądania wsadowego
W scenariuszu przetwarzania wsadowego adres URLHelper ma wartość null w przypadku uzyskiwania dostępu z adresu Request.Url lub RequestContext.Url.
Obejściem tego problemu jest utworzenie nowego wystąpienia urlHelper, jak w poniższym przykładzie:
Tworzenie nowego wystąpienia elementu UrlHelper
if (RequestContext.Url == null) { RequestContext.Url = new UrlHelper(Request); }
ASP.NET MVC
W przypadku korzystania z mvc5 i OrgAuth, jeśli masz widoki, które wykonują walidację 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
lubhttps://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider
nie było obecne w podanym claimsIdentity. Aby włączyć obsługę tokenów chroniących przed fałszerstwem 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 rozwiązać ten problem:
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;
Zostanie to naprawione dla następnej wersji.
Po uaktualnieniu aplikacji MVC4 do MVC5 skompiluj rozwiązanie i uruchom je. Powinien zostać wyświetlony następujący błąd:
[A]System.Web.WebPages.Razor.Configuration.HostSection nie można rzutować na element [B]System.WebPages.Razor.Configuration.HostSection. Typ A pochodzi z '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.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 pliki w folderze Views) w projekcie i wykonaj następujące czynności:
Zaktualizuj wszystkie wystąpienia wersji "4.0.0.0" elementu "System.Web.Mvc" na "5.0.0.0".
Zaktualizuj wszystkie wystąpienia wersji "2.0.0.0" elementów "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 wzorca MVC 5, zobacz Jak uaktualnić ASP.NET MVC 4 i projekt internetowego interfejsu API w celu ASP.NET MVC 5 i internetowego interfejsu API 2.
W przypadku korzystania z weryfikacji po stronie klienta w przypadku weryfikacji nieuprawnej w trybie jQuery komunikat weryfikacji jest czasami niepoprawny dla elementu wejściowego HTML z type='number'. Błąd sprawdzania poprawności wymaganej wartości ("Pole Wiek jest wymagany"), jest wyświetlany, gdy zostanie wprowadzona nieprawidłowa liczba zamiast poprawnego komunikatu, że wymagana jest prawidłowa liczba.
Ten problem jest często spotykany w przypadku kodu szkieletowego dla modelu z właściwością całkowitą w widokach Tworzenia i edytowania.
Aby obejść ten problem, zmień pomocnika edytora z:
@Html.EditorFor(person => person.Age)
Do:
@Html.TextBoxFor(person => person.Age)
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ą Na Facebooku może spowodować niestabilność w programie IE, podczas gdy witryna internetowa jest hostowana w strefie intranetowej
Szablon SPA zapewnia zewnętrzne logowanie do Serwisu Facebook. Gdy projekt utworzony przy użyciu szablonu jest uruchomiony lokalnie, logowanie może spowodować awarię programu IE.
Rozwiązanie 2.
Hostowanie witryny internetowej w strefie internetowej; lub
Przetestuj scenariusz w przeglądarce innej niż IE.
Tworzenie szkieletów formularzy internetowych
Tworzenie szkieletów formularzy internetowych zostało usunięte z programu VS2013 i będzie dostępne w przyszłej aktualizacji programu Visual Studio. Można jednak nadal używać szkieletu w projekcie formularzy sieci Web, dodając zależności MVC i generując szkielet dla wzorca MVC. Projekt będzie zawierać kombinację formularzy sieci Web 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.
Tworzenie szkieletów interfejsu MVC i internetowego interfejsu API — HTTP 404, błąd nie znaleziono
Jeśli podczas dodawania elementu szkieletowego do projektu wystąpi błąd, możliwe, że projekt pozostanie w niespójnym stanie. 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:
Aby naprawić 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 naprawić ten błąd dla internetowego interfejsu API:
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
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