Opmerkingen bij de release van ASP.NET en Web Tools voor Visual Studio 2013

door Microsoft

In dit document wordt de release van ASP.NET en Web Tools voor Visual Studio 2013 beschreven.

Inhoud

Nieuwe functies in ASP.NET en webhulpprogramma's voor Visual Studio 2013

Installatienotities

ASP.NET en Web Tools voor Visual Studio 2013 zijn gebundeld in het hoofdinstallatieprogramma en kunnen hier worden gedownload.

Documentatie

Zelfstudies en andere informatie over ASP.NET en webhulpprogramma's voor Visual Studio 2013 zijn beschikbaar op de ASP.NET website.

Softwarevereisten

voor ASP.NET en webhulpprogramma's is Visual Studio 2013 vereist.

Nieuwe functies in ASP.NET en webhulpprogramma's voor Visual Studio 2013

In de volgende secties worden de functies beschreven die zijn geïntroduceerd in de release.

Eén ASP.NET

Met de release van Visual Studio 2013 hebben we een stap gezet voor het combineren van de ervaring van het gebruik van ASP.NET technologieën, zodat u eenvoudig de gewenste technologieën kunt combineren en afstemmen. U kunt bijvoorbeeld een project starten met MVC en later eenvoudig Web Forms-pagina's aan het project toevoegen, of Web-API's scaffolderen in een Web Forms-project. Eén ASP.NET is het allemaal om het voor u als ontwikkelaar gemakkelijker te maken om de dingen te doen waar u van houdt in ASP.NET. Ongeacht welke technologie u kiest, kunt u erop vertrouwen dat u voortbouwt op het vertrouwde onderliggende framework van One ASP.NET.

Nieuwe webprojectervaring

We hebben de ervaring met het maken van nieuwe webprojecten in Visual Studio 2013 verbeterd. In het dialoogvenster Nieuw ASP.NET WebProject kunt u het gewenste projecttype selecteren, een combinatie van technologieën (Web Forms, MVC, Web API) configureren, verificatieopties configureren en een eenheidstestproject toevoegen.

Nieuw ASP.NET Project

In het nieuwe dialoogvenster kunt u de standaardverificatieopties voor veel sjablonen wijzigen. Wanneer u bijvoorbeeld een ASP.NET Web Forms-project maakt, kunt u een van de volgende opties selecteren:

  • Geen authenticatie
  • Afzonderlijke gebruikersaccounts (ASP.NET lidmaatschap of sociale provider aanmelden)
  • Organisatieaccounts (Active Directory in een internetapplicatie)
  • Windows-authenticatie (Active Directory in een intranettoepassing)

Verificatieopties

Zie ASP.NET Identiteit verderop in dit document voor meer informatie over de nieuwe verificatieopties.

ASP.NET Scaffolding

ASP.NET Scaffolding is een framework voor het genereren van code voor ASP.NET webtoepassingen. Het maakt het eenvoudig om standaardcode toe te voegen aan uw project dat communiceert met een gegevensmodel.

In eerdere versies van Visual Studio was de scaffolding beperkt tot ASP.NET MVC-projecten. Met Visual Studio 2013 kunt u nu scaffolding gebruiken voor elk ASP.NET project, inclusief Web Forms. Visual Studio 2013 biedt momenteel geen ondersteuning voor het genereren van pagina's voor een Web Forms-project, maar u kunt nog steeds scaffolding gebruiken met Web Forms door MVC-afhankelijkheden aan het project toe te voegen. Ondersteuning voor het genereren van pagina's voor webformulieren wordt toegevoegd in een toekomstige update.

Wanneer u scaffolding gebruikt, zorgen we ervoor dat alle vereiste afhankelijkheden in het project zijn geïnstalleerd. Als u bijvoorbeeld begint met een ASP.NET Web Forms-project en vervolgens scaffolding gebruikt om een web-API-controller toe te voegen, worden de vereiste NuGet-pakketten en -verwijzingen automatisch aan uw project toegevoegd.

Als u MVC-scaffolding wilt toevoegen aan een Web Forms-project, voegt u een nieuw gescaffold item toe en selecteert u MVC 5 Dependencies in het dialoogvenster. Er zijn twee opties voor scaffolding MVC; Minimaal en volledig. Als u Minimaal selecteert, worden alleen de NuGet-pakketten en -verwijzingen voor ASP.NET MVC aan uw project toegevoegd. Als u de optie Volledig selecteert, worden de minimale afhankelijkheden toegevoegd, evenals de vereiste inhoudsbestanden voor een MVC-project.

Ondersteuning voor asynchrone controllers maakt gebruik van de nieuwe asynchrone functies van Entity Framework 6.

Zie ASP.NET Scaffolding Overzicht voor meer informatie en tutorials.

Met de nieuwe functie Browserkoppeling kunt u meerdere browsers verbinden met Visual Studio en ze allemaal vernieuwen door op een knop op de werkbalk te klikken. U kunt meerdere browsers verbinden met uw ontwikkelsite, inclusief mobiele emulators, en op Vernieuwen klikken om alle browsers tegelijk te vernieuwen. Browser Link maakt ook een API beschikbaar waarmee ontwikkelaars browserkoppelingsextensies kunnen schrijven.

Schermopname van het Visual Studio-menu, met het pictogram Vernieuwen gemarkeerd en browserkoppelingsdashboard gemarkeerd in het vervolgkeuzemenu.

Door ontwikkelaars in staat te stellen gebruik te maken van de Browser Link-API, is het mogelijk om zeer geavanceerde scenario's te maken die grenzen overschrijden tussen Visual Studio en elke browser die is verbonden. Web Essentials maakt gebruik van de API om een geïntegreerde ervaring te creëren tussen Visual Studio en de ontwikkelhulpprogramma's van de browser, mobiele emulators op afstand te beheren en nog veel meer.

Verbeteringen in Visual Studio Web Editor

Visual Studio 2013 bevat een nieuwe HTML-editor voor Razor-bestanden en HTML-bestanden in webtoepassingen. De nieuwe HTML-editor biedt één uniform schema op basis van HTML5. Het heeft automatische accolaadeaanvulling, jQuery UI en AngularJS kenmerk IntelliSense, kenmerk IntelliSense-groepering, ID en klassenaam IntelliSense, en andere verbeteringen, waaronder betere prestaties, formattering en SmartTags.

In de volgende schermopname ziet u hoe u Bootstrap-kenmerk IntelliSense gebruikt in de HTML-editor.

Intellisense in HTML-editor

Visual Studio 2013 wordt ook geleverd met zowel CoffeeScript- als LESS-editors. De LESS-editor wordt geleverd met alle coole functies van de CSS-editor en heeft specifieke IntelliSense voor variabelen en mixins in alle LESS-documenten in de @import keten.

Ondersteuning voor Azure App Service Web Apps in Visual Studio

In Visual Studio 2013 met de Azure SDK voor .NET 2.2 kunt u Server Explorer gebruiken om rechtstreeks met uw externe web-apps te communiceren. U kunt zich aanmelden bij uw Azure-account, nieuwe web-apps maken, apps configureren, realtime logboeken bekijken en meer. Zodra SDK 2.2 is uitgebracht, kun je binnenkort op afstand in de foutopsporingsmodus in Azure uitvoeren. De meeste nieuwe functies voor Azure App Service Web Apps werken ook in Visual Studio 2012 wanneer u de huidige versie van de Azure SDK voor .NET installeert.

Zie de volgende bronnen voor meer informatie:

Verbeteringen voor publiceren op internet

Visual Studio 2013 bevat nieuwe en verbeterde functies voor webpublicing. Hier volgen er een paar:

Zie de ASP.NET-site voor meer informatie over ASP.NET webimplementatie.

NuGet 2.7

NuGet 2.7 bevat een uitgebreide set nieuwe functies die uitgebreid worden beschreven in de releaseopmerkingen van NuGet 2.7.

Deze versie van NuGet verwijdert ook de noodzaak om expliciet toestemming te geven voor de functie voor pakketherstel van NuGet om pakketten te downloaden. Toestemming (en het bijbehorende selectievakje in het dialoogvenster Voorkeuren van NuGet) wordt nu verleend door NuGet te installeren. Nu werkt pakketherstel gewoon standaard.

webformulieren ASP.NET

Eén ASP.NET

De Web Forms-projectsjablonen kunnen naadloos worden geïntegreerd met de nieuwe one ASP.NET-ervaring. U kunt MVC- en Web-API-ondersteuning toevoegen aan uw Web Forms-project en u kunt verificatie configureren met behulp van de wizard One ASP.NET project maken.

ASP.NET identiteit

De Web Forms-projectsjablonen ondersteunen het nieuwe ASP.NET Identity Framework. Daarnaast bieden de sjablonen nu ondersteuning voor het maken van een webformulierintranetproject.

Bootstrap

De Web Forms-sjablonen maken gebruik van Bootstrap om een strak en responsief uiterlijk te bieden dat u eenvoudig kunt aanpassen.

ASP.NET MVC 5

Eén ASP.NET

De Web MVC-projectsjablonen kunnen naadloos worden geïntegreerd met de nieuwe One ASP.NET-ervaring. U kunt uw MVC-project aanpassen en de verificatie configureren met behulp van de "One ASP.NET Project Creation Wizard". Een inleidende zelfstudie voor ASP.NET MVC 5 vindt u in Aan de slag met ASP.NET MVC 5.

Zie How to Upgrade an ASP.NET MVC 4 and Web API Project to ASP.NET MVC 5 and Web API 2 (Een ASP.NET MVC 4- en Web-API-project upgraden naar MVC 5 en Web API 2) voor meer informatie over het upgraden van MVC 4-projecten naar MVC 5.

ASP.NET identiteit

De MVC-projectsjablonen zijn bijgewerkt om ASP.NET Identiteit te gebruiken voor verificatie en identiteitsbeheer. Een zelfstudie met Facebook- en Google-verificatie en de nieuwe lidmaatschaps-API vindt u in Een ASP.NET MVC 5-app maken met Facebook en Google OAuth2 en OpenID-aanmelding en een ASP.NET MVC-app maken met verificatie en SQL DB en implementeren in Azure App Service.

Bootstrap

De MVC-projectsjabloon is bijgewerkt om Bootstrap te gebruiken om een strak en responsief uiterlijk te bieden dat u eenvoudig kunt aanpassen.

Verificatiefilters

Verificatiefilters zijn een nieuw type filter in ASP.NET MVC dat wordt uitgevoerd vóór autorisatiefilters in de ASP.NET MVC-pijplijn en waarmee u verificatielogica per actie, per controller of globaal voor alle controllers kunt opgeven. Verificatiefilters verwerken referenties in de aanvraag en geven een bijbehorende principal op. Verificatiefilters kunnen ook verificatieproblemen toevoegen als reactie op niet-geautoriseerde aanvragen.

Filteroverschrijvingen

U kunt nu overschrijven welke filters van toepassing zijn op een bepaalde actiemethode of controller door een overschrijdingsfilter te specificeren. Override-filters specificeren een set filtertypen die niet uitgevoerd worden voor een bepaald bereik (actie of controller). Hiermee kunt u filters configureren die globaal van toepassing zijn, maar vervolgens bepaalde globale filters uitsluiten van toepassing op specifieke acties of controllers.

Kenmerkroutering

ASP.NET MVC ondersteunt nu kenmerkroutering, dankzij een bijdrage van Tim McCall, de auteur van http://attributerouting.net. Met kenmerkroutering kunt u uw routes opgeven door aantekeningen te maken bij uw acties en controllers.

ASP.NET Web-API 2

Kenmerkroutering

ASP.NET Web-API ondersteunt nu kenmerkroutering, dankzij een bijdrage van Tim McCall, de auteur van http://attributerouting.net. Met kenmerkroutering kunt u uw Web-API-routes opgeven door aantekeningen te maken op uw acties en controllers als volgt:

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

Kenmerkroutering geeft u meer controle over de URI's in uw web-API. U kunt bijvoorbeeld eenvoudig een resourcehiërarchie definiëren met één API-controller:

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) { } 
}

Kenmerkroutering biedt ook een handige syntaxis voor het opgeven van optionele parameters, standaardwaarden en routebeperkingen:

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

Zie Kenmerkroutering in Web API 2 voor meer informatie over kenmerkroutering.

OAuth 2.0

De projectsjablonen web-API en toepassing met één pagina ondersteunen nu autorisatie met behulp van OAuth 2.0. OAuth 2.0 is een framework voor het autoriseren van clienttoegang tot beveiligde resources. Het werkt voor verschillende clients, waaronder browsers en mobiele apparaten.

Ondersteuning voor OAuth 2.0 is gebaseerd op nieuwe beveiligings-middleware die wordt geleverd door de Microsoft OWIN-onderdelen voor bearer-verificatie en het implementeren van de autorisatieserverfunctie. Clients kunnen ook worden geautoriseerd met behulp van een organisatieautorisatieserver, zoals Azure Active Directory of ADFS in Windows Server 2012 R2.

OData-verbeteringen

Ondersteuning voor $select, $expand, $batch en $value

ASP.NET Web-API OData biedt nu volledige ondersteuning voor $select, $expand en $value. U kunt ook $batch gebruiken voor het aanvragen van batchverwerking en verwerking van wijzigingensets.

Met de opties $select en $expand kunt u de vorm wijzigen van de gegevens die worden geretourneerd vanuit een OData-eindpunt. Zie Inleiding tot $select- en $expand-ondersteuning in Web API OData voor meer informatie.

Verbeterde uitbreidbaarheid

De OData-formatters zijn nu uitbreidbaar. U kunt metagegevens van Atom-vermeldingen toevoegen, vermeldingen van benoemde stream- en mediakoppelingen ondersteunen, instantieaantekeningen toevoegen en aanpassen hoe koppelingen worden gegenereerd.

Ondersteuning zonder typen

U kunt nu OData-services bouwen zonder CLR-typen te hoeven definiëren voor uw entiteitstypen. In plaats daarvan kunnen uw OData-controllers exemplaren van IEdmObject aannemen of retourneren. Dit zijn de OData-formatters serialiseren/deserialiseren.

Een bestaand model opnieuw gebruiken

Als u al een bestaand entiteitsgegevensmodel (EDM) hebt, kunt u het nu rechtstreeks opnieuw gebruiken in plaats van een nieuw model te maken. Als u bijvoorbeeld Entity Framework gebruikt, kunt u de EDM gebruiken die EF voor u bouwt.

Batchverwerking aanvragen

Batchverwerking van aanvragen combineert meerdere bewerkingen in één HTTP POST-aanvraag, om netwerkverkeer te verminderen en een soepelere, minder intensieve gebruikersinterface te bieden. ASP.NET Web-API ondersteunt nu verschillende strategieën voor het aanvragen van batchverwerking:

  • Gebruik het $batch-eindpunt van een OData-service.
  • Meerdere aanvragen verpakken in één MIME-aanvraag met meerdere onderdelen.
  • Gebruik een aangepaste batchindeling.

Als u batchverwerking van aanvragen wilt inschakelen, voegt u gewoon een route met een batchverwerkingshandler toe aan uw web-API-configuratie:

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

U kunt ook bepalen of aanvragen sequentieel of in elke willekeurige volgorde worden uitgevoerd.

Portable ASP.NET Web API Client

U kunt nu de ASP.NET Web-API-client gebruiken om draagbare klassebibliotheken te maken die werken in uw Windows Store- en Windows Phone 8-toepassingen. U kunt ook draagbare formatters maken die kunnen worden gedeeld tussen clients en servers.

Verbeterde testbaarheid

Web-API 2 maakt het veel eenvoudiger om uw API-controllers te testen. Maak gewoon een instantie van uw API-controller met uw aanvraagbericht en configuratie en roep vervolgens de actiemethode aan die u wilt testen. Het is ook eenvoudig om de UrlHelper-klasse te mocken, voor actiemethoden die het genereren van koppelingen uitvoeren.

IHttpActionResult

U kunt nu IHttpActionResult implementeren om het resultaat van uw web-API-actiemethoden in te kapselen. Een IHttpActionResult geretourneerd vanuit een web-API-actiemethode wordt uitgevoerd door de ASP.NET Web API-runtime om het resulterende antwoordbericht te produceren. Een IHttpActionResult kan worden geretourneerd vanuit elke web-API-actie om eenheidstests van uw web-API-implementatie te vereenvoudigen. Voor het gemak worden een aantal IHttpActionResult-implementaties standaard aangeboden, inclusief resultaten voor het retourneren van specifieke statuscodes, opgemaakte inhoud of antwoorden die zijn onderhandeld over inhoud.

HttpRequestContext (HTTP-verzoekcontext)

De nieuwe HttpRequestContext houdt alle statussen bij die aan de aanvraag zijn gekoppeld, maar is niet onmiddellijk beschikbaar vanuit de aanvraag. U kunt bijvoorbeeld HttpRequestContext gebruiken om routegegevens op te halen, de principal die is gekoppeld aan de aanvraag, het clientcertificaat, de UrlHelper en de hoofdmap van het virtuele pad. U kunt eenvoudig een HttpRequestContext maken voor eenheidstests.

Omdat de principal met het verzoek wordt meegevoerd in plaats van te vertrouwen op Thread.CurrentPrincipal, is de principal nu beschikbaar gedurende de hele levensduur van het verzoek binnen de Web API-pijplijn.

CORS

Dankzij een andere geweldige bijdrage van Brock Allen biedt ASP.NET nu volledige ondersteuning voor Cross Origin Request Sharing (CORS).

Browserbeveiliging voorkomt dat een webpagina AJAX-aanvragen naar een ander domein verzendt. CORS is een W3C-standaard waarmee een server hetzelfde origin-beleid kan versoepelen. Met CORS kan een server expliciet bepaalde cross-origin-aanvragen toestaan terwijl andere aanvragen worden geweigerd.

Web-API 2 ondersteunt nu CORS, waaronder automatische verwerking van voorbereidende aanvragen. Zie Cross-Origin-aanvragen inschakelen in ASP.NET Web-API voor meer informatie.

Verificatiefilters

Verificatiefilters zijn een nieuw type filter in ASP.NET web-API die wordt uitgevoerd vóór autorisatiefilters in de ASP.NET Web API-pijplijn en waarmee u verificatielogica per actie, per controller of globaal voor alle controllers kunt opgeven. Verificatiefilters verwerken referenties in de aanvraag en geven een bijbehorende principal op. Verificatiefilters kunnen ook verificatieproblemen toevoegen als reactie op niet-geautoriseerde aanvragen.

Filteroverschrijvingen

U kunt nu bepalen welke filters van toepassing zijn op een bepaalde actiemethode of controller door een override-filter op te geven. Overschrijvingsfilters specificeren een set filtertypen die niet mogen worden uitgevoerd voor een gegeven bereik (zoals een actie of een controller). Hiermee kunt u globale filters toevoegen, maar vervolgens enkele van specifieke acties of controllers uitsluiten.

OWIN-integratie

ASP.NET Web-API biedt nu volledige ondersteuning voor OWIN en kan worden uitgevoerd op elke host die geschikt is voor OWIN. Ook opgenomen is een HostAuthenticationFilter dat integratie biedt met het OWIN-verificatiesysteem.

Met OWIN-integratie kunt u web-API zelf hosten in uw eigen proces naast andere OWIN-middleware, zoals SignalR. Voor meer informatie, zie OWIN gebruiken om ASP.NET Web API zelfstandig te hosten.

ASP.NET SignalR 2.0

In de volgende secties worden de functies van SignalR 2.0 beschreven.

Zie Een SignalR 1.x-project upgraden voor een voorbeeld van het upgraden van een bestaand 1.x-project naar SignalR 2.0.

Gebouwd op OWIN

SignalR 2.0 is volledig gebouwd op OWIN (de Open Web Interface voor .NET). Deze wijziging maakt het installatieproces voor SignalR veel consistenter tussen door het web gehoste en zelf-hostende SignalR-toepassingen, maar vereist ook een aantal API-wijzigingen.

MapHubs en MapConnection zijn nu MapSignalR

Voor compatibiliteit met OWIN-standaarden zijn deze methoden gewijzigd in MapSignalR. MapSignalR zonder parameters roept het aan om alle hubs te mappen (zoals MapHubs dat doet in versie 1.x); voor het mappen van individuele PersistentConnection-objecten, specificeer het verbindingstype als typeparameter en de URL-extensie voor de verbinding als eerste argument.

De MapSignalR methode wordt aangeroepen in een Owin-opstartklasse. Visual Studio 2013 bevat een nieuwe sjabloon voor een Owin-opstartklasse; Ga als volgt te werk om deze sjabloon te gebruiken:

  1. Klik met de rechtermuisknop op het project
  2. Selecteer Toevoegen, Nieuw item...
  3. Selecteer Owin Startup-klasse. Geef de nieuwe klasse een naam Startup.cs.

In een webtoepassing wordt de Owin-opstartklasse met de MapSignalR methode vervolgens toegevoegd aan het opstartproces van Owin met behulp van een vermelding in het knooppunt toepassingsinstellingen van het Web.Config-bestand, zoals hieronder wordt weergegeven.

In een zelf-hostende toepassing wordt de opstartklasse doorgegeven als de typeparameter van de WebApp.Start methode.

Hubs en verbindingen toewijzen in SignalR 1.x (vanuit het algemene toepassingsbestand in een webtoepassing):

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");
}

Hubs en verbindingen in kaart brengen in SignalR 2.0 (van een Owin-startupklassebestand):

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");
        }
    }
}

In een zelf-hostende toepassing wordt de opstartklasse doorgegeven als de typeparameter voor de WebApp.Start methode, zoals hieronder wordt weergegeven.

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

Ondersteuning voor meerdere domeinen

In SignalR 1.x werden aanvragen voor meerdere domeinen beheerd door één EnableCrossDomain-vlag. Met deze vlag worden zowel JSONP- als CORS-aanvragen beheerd. Voor meer flexibiliteit is alle CORS-ondersteuning verwijderd uit het serveronderdeel van SignalR (JavaScript-clients gebruiken nog steeds CORS normaal als wordt gedetecteerd dat de browser dit ondersteunt) en is er nieuwe OWIN-middleware beschikbaar gesteld om deze scenario's te ondersteunen.

Als JSONP op de client in SignalR 2.0 vereist is (ter ondersteuning van aanvragen tussen domeinen in oudere browsers), moet het expliciet worden geactiveerd door EnableJSONP op het HubConfiguration-object op true in te stellen, zoals hieronder wordt weergegeven. JSONP is standaard uitgeschakeld, omdat deze minder veilig is dan CORS.

Als u de nieuwe CORS-middleware in SignalR 2.0 wilt toevoegen, voegt u de Microsoft.Owin.Cors bibliotheek toe aan uw project en roept UseCors u deze aan voor uw SignalR-middleware, zoals wordt weergegeven in de onderstaande sectie.

Microsoft.Owin.Cors toevoegen aan uw project: Voer de volgende opdracht uit in de Package Manager-console om deze bibliotheek te installeren:

Install-Package Microsoft.Owin.Cors

Met deze opdracht wordt de versie 2.0.0 van het pakket aan uw project toegevoegd.

UseCors aanroepen

De volgende codefragmenten laten zien hoe u verbindingen tussen domeinen implementeert in SignalR 1.x en 2.0.

Aanvragen voor meerdere domeinen implementeren in SignalR 1.x (vanuit het algemene toepassingsbestand)

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

Aanvragen voor meerdere domeinen implementeren in SignalR 2.0 (vanuit een C#-codebestand)

De volgende code laat zien hoe u CORS of JSONP inschakelt in een SignalR 2.0-project. In dit codevoorbeeld wordt gebruikgemaakt Map van en RunSignalR in plaats van MapSignalR, zodat de CORS-middleware alleen wordt uitgevoerd voor de SignalR-aanvragen waarvoor CORS-ondersteuning is vereist (in plaats van voor al het verkeer op het pad dat is opgegeven in MapSignalR.) Map ook kunnen worden gebruikt voor andere middleware die moet worden uitgevoerd voor een specifiek URL-voorvoegsel, in plaats van voor de hele toepassing.

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);
            });
        }
    }
}

Ondersteuning voor iOS en Android via MonoTouch en MonoDroid

Belangrijk

Xamarin.Android, Xamarin.iOS, Xamarin.Mac zijn nu rechtstreeks geïntegreerd in .NET (te beginnen met .NET 6) als .NET voor Android, .NET voor iOS en .NET voor macOS. Als u vandaag met deze projecttypen bouwt, moeten ze worden bijgewerkt naar .NET SDK-projecten voor continue ondersteuning. Zie voor meer informatie over het upgraden van Xamarin-projecten naar .NET de Upgrade van Xamarin naar .NET & .NET MAUI documentatie.

Er is ondersteuning toegevoegd voor iOS- en Android-clients met behulp van MonoTouch- en MonoDroid-onderdelen uit de Xamarin-bibliotheek. Zie Xamarin Components gebruiken voor meer informatie over het gebruik ervan. Deze onderdelen zijn beschikbaar in de Xamarin Store wanneer de SignalR RTW-release beschikbaar is.

### Portable .NET-client

Om platformoverschrijdende ontwikkeling te vergemakkelijken, zijn de Silverlight-, WinRT- en Windows Phone-clients vervangen door één draagbare .NET-client die ondersteuning biedt voor de volgende platforms:

  • NET 4.5
  • Silverlight 5
  • WinRT (.NET voor Windows Store-apps)
  • Windows Phone 8

Nieuw Self-Host-pakket

Er is nu een NuGet-pakket om het gemakkelijker te maken om aan de slag te gaan met SignalR-Self-Host (SignalR-toepassingen die worden gehost in een proces of andere toepassing, in plaats van te worden gehost op een webserver). Als u een zelfhostproject wilt upgraden dat is gebouwd met SignalR 1.x, verwijdert u het pakket Microsoft.AspNet.SignalR.Owin en voegt u het pakket Microsoft.AspNet.SignalR.SelfHost toe. Zie Zelfstudie: SignalR Self-Host voor meer informatie over het aan de slag gaan met het self-hostpakket.

Achterwaarts compatibele serverondersteuning

In eerdere versies van SignalR moesten de versies van het SignalR-pakket die in de client worden gebruikt en de server identiek zijn. Om ondersteuning te bieden voor dikke clienttoepassingen die moeilijk kunnen worden bijgewerkt, ondersteunt SignalR 2.0 nu het gebruik van een nieuwere serverversie met een oudere client. Opmerking: SignalR 2.0 biedt geen ondersteuning voor servers die zijn gebouwd met oudere versies met nieuwere clients.

Serverondersteuning voor .NET 4.0 is verwijderd

SignalR 2.0 heeft ondersteuning voor serverinteroperabiliteit met .NET 4.0 verwijderd. .NET 4.5 moet worden gebruikt met SignalR 2.0-servers. Er is nog steeds een .NET 4.0-client voor SignalR 2.0.

Een bericht verzenden naar een lijst met clients en groepen

In SignalR 2.0 is het mogelijk om een bericht te verzenden met behulp van een lijst met client- en groeps-id's. De volgende codefragmenten laten zien hoe u dit doet.

Een bericht verzenden naar een lijst met clients en groepen met behulp van 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);
    }
}

Een bericht verzenden naar een lijst met clients en groepen met behulp van 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();
    }
}

Een bericht verzenden naar een specifieke gebruiker

Met deze functie kunnen gebruikers specificeren wat de userId is op basis van een IRequest in een nieuwe interface IUserIdProvider.

De interface IUserIdProvider

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

Standaard is er een implementatie die gebruikmaakt van de IPrincipal.Identity.Name van de gebruiker als gebruikersnaam.

In hubs kunt u berichten verzenden naar deze gebruikers via een nieuwe API:

De Clients.User-API gebruiken

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

Betere ondersteuning voor foutafhandeling

Gebruikers kunnen HubException nu vanuit elke hub-aanroep gooien. De constructor van de HubException kan een bericht en een object met extra foutgegevens aannemen. SignalR zal de uitzondering automatisch serialiseren en naar de client verzenden waar deze wordt gebruikt om de aanroep van de hubmethode af te wijzen/te mislukken.

De instelling voor gedetailleerde hub uitzonderingen heeft geen invloed op of HubException naar de client wordt verzonden; het wordt altijd verzonden.

Code aan de serverzijde die het verzenden van een HubException naar de client demonstreert

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);
    }
}

JavaScript-clientcode die laat zien hoe reageert op een HubException die is verzonden vanaf de server

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

.NET-clientcode die laat zien hoe reageert op een HubException die is verzonden vanaf de server

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

Eenvoudigere eenheidstests van hubs

SignalR 2.0 bevat een interface genaamd IHubCallerConnectionContext op Hubs waarmee u eenvoudiger mock client-side aanroepen kunt creëren. De volgende codefragmenten laten zien hoe u deze interface gebruikt met populaire testmogelijkheden xUnit.net en moq.

Eenheid testen SignalR met 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);
}

Unittesting van SignalR met 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();

JavaScript-foutafhandeling

In SignalR 2.0 retourneren alle callbacks voor JavaScript-foutafhandeling JavaScript-foutobjecten in plaats van onbewerkte tekenreeksen. Hierdoor kan SignalR uitgebreidere informatie naar uw fouthandlers doorsturen. U kunt de interne uitzondering ophalen uit de source eigenschap van de fout.

JavaScript-clientcode die de uitzondering Start.Fail afhandelt

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

ASP.NET identiteit

Nieuw ASP.NET-lidmaatschapssysteem

ASP.NET Identity is het nieuwe lidmaatschapssysteem voor ASP.NET toepassingen. ASP.NET Identity maakt het eenvoudig om gebruikersspecifieke profielgegevens te integreren met toepassingsgegevens. ASP.NET Identity kunt u ook het persistentiemodel voor gebruikersprofielen in uw toepassing kiezen. U kunt de gegevens opslaan in een SQL Server-database of een ander gegevensarchief, inclusief NoSQL-gegevensarchieven zoals Azure Storage-tabellen. Zie Afzonderlijke gebruikersaccounts voor het maken van ASP.NET-webprojecten in Visual Studio 2013 voor meer informatie.

Op claims gebaseerde verificatie

ASP.NET ondersteunt nu verificatie op basis van claims, waarbij de identiteit van de gebruiker wordt weergegeven als een set claims van een vertrouwde verlener. Gebruikers kunnen worden geverifieerd met behulp van een gebruikersnaam en wachtwoord die worden onderhouden in een toepassingsdatabase, of met behulp van sociale id-providers (bijvoorbeeld: Microsoft-accounts, Facebook, Google, Twitter) of organisatieaccounts via Azure Active Directory of Active Directory Federation Services (ADFS).

Integratie met Azure Active Directory en Windows Server Active Directory

U kunt nu ASP.NET projecten maken die gebruikmaken van Azure Active Directory of Windows Server Active Directory (AD) voor verificatie. Zie Organisatieaccounts maken in Het maken van ASP.NET-webprojecten in Visual Studio 2013 voor meer informatie.

OWIN-integratie

ASP.NET verificatie is nu gebaseerd op OWIN-middleware die kan worden gebruikt op elke OWIN-host. Zie de volgende sectie Microsoft OWIN Components voor meer informatie over OWIN.

Microsoft OWIN-onderdelen

Open Web Interface voor .NET (OWIN) definieert een abstractie tussen .NET-webservers en webtoepassingen. OWIN koppelt de webtoepassing los van de server, waardoor webtoepassingen hostagnostisch worden. U kunt bijvoorbeeld een op OWIN gebaseerde webtoepassing hosten in IIS of zelf hosten in een aangepast proces.

Wijzigingen die zijn geïntroduceerd in de Microsoft OWIN-onderdelen (ook wel het Katana-project genoemd) omvatten nieuwe server- en hostonderdelen, nieuwe helperbibliotheken en middleware en nieuwe verificatie-middleware.

Zie Wat is er nieuw in OWIN en Katana voor meer informatie over OWIN en Katana.

Opmerking: OWIN-toepassingen kunnen niet worden uitgevoerd in de klassieke IIS-modus; ze moeten worden uitgevoerd in de geïntegreerde modus.

Opmerking: OWIN-toepassingen moeten worden uitgevoerd met volledige vertrouwensrechten.

Nieuwe servers en hosts

Met deze release zijn nieuwe onderdelen toegevoegd om zelfhostscenario's mogelijk te maken. Deze onderdelen omvatten de volgende NuGet-pakketten:

  • Microsoft.Owin.Host.HttpListener. Biedt een OWIN-server die httpListener gebruikt om te luisteren naar HTTP-aanvragen en deze door te sturen naar de OWIN-pijplijn.
  • Microsoft.Owin.Hosting biedt een bibliotheek voor ontwikkelaars die zelf een OWIN-pijplijn willen hosten in een aangepast proces, zoals een consoletoepassing of Windows-service.
  • OwinHost. Biedt een zelfstandig uitvoerbaar bestand dat wordt verpakt Microsoft.Owin.Hosting en waarmee u zelf een OWIN-pijplijn kunt hosten zonder dat u een aangepaste hosttoepassing hoeft te schrijven.

Bovendien maakt het Microsoft.Owin.Host.SystemWeb pakket middleware nu mogelijk om hints te bieden aan de SystemWeb-server , waarmee wordt aangegeven dat de middleware moet worden aangeroepen tijdens een specifieke ASP.NET pijplijnfase. Deze functie is met name handig voor verificatie-middleware, die vroeg in de ASP.NET-pijplijn moet worden uitgevoerd.

Helperbibliotheken en middleware

Hoewel u OWIN-onderdelen kunt schrijven met alleen de functie- en typedefinities uit de OWIN-specificatie, biedt het nieuwe Microsoft.Owin pakket een gebruiksvriendelijkere set abstracties. Dit pakket combineert verschillende eerdere pakketten (bijvoorbeeld , Owin.ExtensionsOwin.Types) in één goed gestructureerd objectmodel dat vervolgens eenvoudig kan worden gebruikt door andere OWIN-onderdelen. In feite gebruiken de meeste Microsoft OWIN-onderdelen dit pakket.

Opmerking

OWIN-toepassingen kunnen niet worden uitgevoerd in de klassieke IIS-modus; ze moeten worden uitgevoerd in de geïntegreerde modus.

Opmerking

OWIN-toepassingen moeten in volledige vertrouwensmodus worden uitgevoerd.

Deze release bevat ook het Microsoft.Owin.Diagnostics-pakket, waaronder middleware voor het valideren van een actieve OWIN-toepassing, plus middleware voor foutpagina's om fouten te onderzoeken.

Verificatieonderdelen

De volgende verificatieonderdelen zijn beschikbaar.

  • Microsoft.Owin.Security.ActiveDirectory. Hiermee schakelt u verificatie in met behulp van on-premises of cloudgebaseerde adreslijstservices.
  • Microsoft.Owin.Security.Cookies maakt verificatie met behulp van cookies mogelijk. Dit pakket had eerder de naam Microsoft.Owin.Security.Forms.
  • Microsoft.Owin.Security.Facebook maakt verificatie mogelijk met behulp van de OAuth-service van Facebook.
  • Microsoft.Owin.Security.Google Maakt verificatie mogelijk met behulp van de OpenID-service van Google.
  • Microsoft.Owin.Security.Jwt Schakelt verificatie in met behulp van JWT-tokens.
  • Microsoft.Owin.Security.MicrosoftAccount maakt verificatie mogelijk met behulp van Microsoft-accounts.
  • Microsoft.Owin.Security.OAuth. Biedt een OAuth-autorisatieserver en middleware voor het verifiëren van bearer-tokens.
  • Microsoft.Owin.Security.Twitter maakt verificatie mogelijk met behulp van de OAuth-service van Twitter.

Deze release bevat ook het Microsoft.Owin.Cors pakket, dat middleware bevat voor het afhandelen van cross-origin HTTP-aanvragen.

Opmerking

Ondersteuning voor JWT-ondertekening is verwijderd in de definitieve versie van Visual Studio 2013.

Entity Framework 6

Zie De versiegeschiedenis van Entity Framework voor een lijst met nieuwe functies en andere wijzigingen in Entity Framework 6.

ASP.NET Razor 3

ASP.NET Razor 3 bevat de volgende nieuwe functies:

  • Ondersteuning voor het bewerken van tabbladen. Voorheen werkten de opdracht Document opmaken, automatisch inspringen en automatisch opmaken in Visual Studio niet correct wanneer de optie Tabbladen behouden werd gebruikt. Deze wijziging corrigeert visual Studio-opmaak voor Razor-code voor tabbladopmaak.
  • Ondersteuning voor url-herschrijfregels bij het genereren van koppelingen.
  • Het verwijderen van een transparant beveiligingskenmerk.

    Opmerking

    Dit is een belangrijke wijziging en maakt Razor 3 niet compatibel met MVC4 en eerder, terwijl Razor 2 niet compatibel is met MVC5 of assembly's die zijn gecompileerd op MVC5.

=======

ASP.NET App pauzeren

ASP.NET App Suspend is een game-veranderende functie in .NET Framework 4.5.1 die de gebruikerservaring en het economische model ingrijpend wijzigt voor het hosten van grote aantallen ASP.NET sites op één computer. Zie ASP.NET App Suspend– responsieve gedeelde .NET-webhosting voor meer informatie.

Bekende problemen en belangrijke wijzigingen

In deze sectie worden bekende problemen en belangrijke wijzigingen in de ASP.NET en Web Tools voor Visual Studio 2013 beschreven.

NuGet

  • Het herstellen van nieuwe pakketten werkt niet op Mono wanneer u een SLN-bestand gebruikt. Dit probleem zal worden opgelost in een toekomstige nuget.exe-download en NuGet.CommandLine-pakketupdate.
  • Het herstellen van nieuwe pakketten werkt niet met Wix-projecten. Dit zal worden opgelost in een komende download van nuget.exe en een update van het NuGet.CommandLine-pakket.

ASP.NET Web-API

  1. ODataQueryOptions<T>.ApplyTo(IQueryable) retourneert IQueryable<T> niet altijd, omdat we ondersteuning voor $select en $expand hebben toegevoegd.

    Onze eerdere voorbeelden voor ODataQueryOptions<T> hebben altijd de retourwaarde van ApplyTo naar IQueryable<T> gecast. Dit werkte eerder omdat de queryopties die we eerder hebben ondersteund ($filter, $orderby, $skip, $top) de vorm van de query niet wijzigen. Nu we $select en $expand ondersteunen, zal de retourwaarde van ApplyTo niet altijd IQueryable<T> zijn.

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

    Als u de voorbeeldcode van eerder gebruikt, blijft deze werken als de client niet verzendt $select en $expand. Als u $select en $expand wilt ondersteunen, moet u deze code wijzigen.

    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 of RequestContext.URL is null tijdens een batchaanvraag

    In een batchverwerkingsscenario is UrlHelper null wanneer deze wordt geopend vanuit Request.URL of RequestContext.URL.

    De tijdelijke oplossing voor dit probleem is het maken van een nieuw exemplaar van UrlHelper, zoals in het volgende voorbeeld:

    Een nieuw exemplaar van UrlHelper maken

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

ASP.NET MVC

  1. Als u MVC5 en OrgAuth gebruikt en u weergaven hebt die antiforgerTokenvalidatie uitvoeren, ziet u mogelijk de volgende fout wanneer u gegevens in de weergave plaatst:

    Fout:

    Serverfout in toepassing '/'.

    Een claim van het type http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier of https://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider was niet aanwezig op de opgegeven ClaimsIdentity. Als u ondersteuning voor antivervalsingstokens met verificatie op basis van claims wilt inschakelen, controleert u of de geconfigureerde claimprovider beide claims opgeeft op de ClaimsIdentity-exemplaren die worden gegenereerd. Als de geconfigureerde claimprovider in plaats daarvan een ander claimtype als een unieke id gebruikt, kan deze worden geconfigureerd door de statische eigenschap AntiForgeryConfig.UniqueClaimTypeIdentifier in te stellen.

    Tijdelijke oplossing:

    Voeg de volgende regel toe in Global.asax om dit op te lossen:

    AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;

    Dit wordt opgelost voor de volgende release.

  2. Na het upgraden van een MVC4-app naar MVC5, bouwt u de oplossing en start u deze. U zou de volgende fout moeten zien:

    [A]System.Web.WebPages.Razor.Configuration.HostSection kan niet worden gecast naar [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A is afkomstig van System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in de context Standaard op locatieC:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll'. Type B is afkomstig van 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in de context 'Standaard' op locatie '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'.

    Als u de bovenstaande fout wilt oplossen, opent u alle Web.config bestanden (inclusief de bestanden in de map Weergaven) in uw project en doet u het volgende:

    1. Werk alle exemplaren van versie 4.0.0.0 van System.Web.Mvc bij naar 5.0.0.0.

    2. Werk alle exemplaren van versie 2.0.0.0 van System.Web.Helpers, System.Web.WebPages en System.WebPages.Razor bij naar 3.0.0.0

      Nadat u de bovenstaande wijzigingen hebt aangebracht, moeten de assemblybindingen er bijvoorbeeld als volgt uitzien:

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

      Zie How to Upgrade an ASP.NET MVC 4 and Web API Project to ASP.NET MVC 5 and Web API 2 (Een ASP.NET MVC 4- en Web-API-project upgraden naar MVC 5 en Web API 2) voor meer informatie over het upgraden van MVC 4-projecten naar MVC 5.

  3. Wanneer u validatie aan de clientzijde gebruikt met jQuery Unobtrusive Validation, is het validatiebericht soms onjuist voor een HTML-invoerelement met het type='number'. De validatiefout voor een vereiste waarde ('Het veld Leeftijd is vereist') wordt weergegeven wanneer een ongeldig getal wordt ingevoerd in plaats van het juiste bericht dat een geldig getal vereist is.

    Dit probleem wordt vaak aangetroffen bij scaffolded code voor een model met een integer-eigenschap in de Maken- en Bewerken-weergaven.

    Als u dit probleem wilt omzeilen, wijzigt u de editor-helper van:

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

    Aan:

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

  4. ASP.NET MVC 5 ondersteunt geen gedeeltelijke vertrouwensrelatie meer. Projecten die zijn gekoppeld aan de binaire MVC- of WebAPI-bestanden, moeten het kenmerk SecurityTransparent en het kenmerk AllowPartiallyTrustedCallers verwijderen. Als u deze kenmerken verwijdert, worden compilerfouten zoals het volgende geëlimineerd.

    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.

    Als neveneffect hiervan kunt u geen 4.0- en 5.0-assembly's in dezelfde toepassing gebruiken. U moet ze allemaal bijwerken naar 5.0.

SPA-sjabloon met Facebook-autorisatie kan instabiliteit in Internet Explorer veroorzaken wanneer de website in de intranetzone wordt gehost.

De SPA-sjabloon biedt externe aanmelding met Facebook. Wanneer het project dat is gemaakt met de sjabloon lokaal wordt uitgevoerd, kan het aanmelden ertoe leiden dat IE vastloopt.

Solution:

  1. Host de website in de internetzone; Of

  2. Test het scenario in een andere browser dan IE.

Web Forms-sjablonering

Web Forms Scaffolding is verwijderd uit VS2013 en is beschikbaar in een toekomstige update voor Visual Studio. U kunt echter nog steeds scaffolding in een Web Forms-project gebruiken door MVC-afhankelijkheden toe te voegen en scaffolding voor MVC te genereren. Uw project bevat een combinatie van Web Forms en MVC.

Als u MVC wilt toevoegen aan uw Web Forms-project, voegt u een nieuw geveerd item toe en selecteert u MVC 5-afhankelijkheden. Selecteer Minimaal of Volledig, afhankelijk van of u alle inhoudsbestanden nodig hebt, zoals scripts. Voeg vervolgens een gescaffoldeerd item toe voor MVC, waardoor er weergaven en een controller in uw project worden aangemaakt.

MVC- en web-API-scaffolding - HTTP 404, foutmelding Niet gevonden

Als er een fout optreedt bij het toevoegen van een gescaffolded item aan een project, is het mogelijk dat uw project in een inconsistente staat verkeert. Sommige van de aangebrachte wijzigingen worden teruggedraaid, maar andere wijzigingen, zoals de geïnstalleerde NuGet-pakketten, worden niet teruggedraaid. Als de wijzigingen in de routeringsconfiguratie worden teruggedraaid, krijgen gebruikers een HTTP 404-fout bij het navigeren naar gefaseerde items.

Tijdelijke oplossing:

  • Als u deze fout voor MVC wilt oplossen, voegt u een nieuwe gegenereerd item toe en selecteert u "MVC 5 afhankelijkheden" (minimaal of volledig). Met dit proces worden alle vereiste wijzigingen aan uw project toegevoegd.

  • Ga als volgt te werk om deze fout voor web-API op te lossen:

    1. Voeg de WebApiConfig-klasse toe aan uw project.

      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. Configureer WebApiConfig.Register in de methode Application_Start in Global.asax als volgt:

      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