Novinky webového rozhraní API 2.2 technologie ASP.NET

od Microsoftu

Toto téma popisuje, co je nového ve webovém rozhraní API ASP.NET 2.2.

Stáhnout

Funkce modulu runtime se vydávají jako balíčky NuGet v galerii NuGet. Všechny balíčky modulu runtime se řídí specifikací sémantické správy verzí . Nejnovější balíček webového rozhraní API ASP.NET 2.2 má následující verzi: 5.2.0. Tyto balíčky můžete nainstalovat nebo aktualizovat prostřednictvím NuGetu. Tato verze obsahuje také odpovídající lokalizované balíčky na NuGetu.

Vydané balíčky NuGet můžete nainstalovat nebo aktualizovat pomocí konzoly Správce balíčků NuGet:

Install-Package Microsoft.AspNet.WebApi -Version 5.2.0

Dokumentace

Kurzy a další informace o ASP.NET Webovém rozhraní API 2.2 jsou k dispozici na webu ASP.NET (https://www.asp.net/web-api).

Nové funkce ve webovém rozhraní API ASP.NET 2.2

OData v4

Tato verze přidává podporu pro protokol OData v4. Další informace najdete v dokumentaci k webovému rozhraní API OData v4.

Tady jsou některé z klíčových funkcí a změn pro OData v4:

Vylepšení směrování atributů

Směrování atributů teď poskytuje bod rozšiřitelnosti s názvem IDirectRouteProvider, který umožňuje úplnou kontrolu nad tím, jak se trasy atributů zjišťují a konfigurují. IDirectRouteProvider zodpovídá za poskytování seznamu akcí a kontrolerů spolu s přidruženými informacemi o trasách, které přesně určují, jaká konfigurace směrování je pro tyto akce požadovaná. Při volání MapAttributes/MapHttpAttributeRoutes může být zadána implementace IDirectRouteProvider.

Přizpůsobení IDirectRouteProvider bude nejjednodušší rozšířením naší výchozí implementace DefaultDirectRouteProvider. Tato třída poskytuje samostatné přepisovatelné virtuální metody pro změnu logiky pro zjišťování atributů, vytváření položek trasy a zjišťování předpony trasy a předpony oblasti.

Následuje několik příkladů toho, co byste mohli udělat s tímto novým bodem rozšiřitelnosti:

  1. Podpora dědičnosti atributů trasy

    Příklad:

    Tady by požadavek typu /api/values/10 úspěšně vrátil "Úspěch:10".

    public class BaseController : ApiController
    {
        [Route("{id:int}")]
        public string Get(int id)
        {
            return "Success:" + id;
        }
    }
    [RoutePrefix("api/values")]
    public class ValuesController : BaseController
    {
    }
           
    config.MapHttpAttributeRoutes(new CustomDirectRouteProvider());
    public class CustomDirectRouteProvider : DefaultDirectRouteProvider
    {
        protected override IReadOnlyList<IDirectRouteFactory> 
        GetActionRouteFactories(HttpActionDescriptor actionDescriptor)
        {
            return actionDescriptor.GetCustomAttributes<IDirectRouteFactory>
            (inherit: true);
        }
    }
    
  2. Zadejte výchozí název trasy atributů podle určitých konvencí, které se vám líbí. Ve výchozím nastavení směrování atributů automaticky nevytáčí názvy tras atributů.

  3. Upravte šablonu tras atributů na jednom centrálním místě, než skončí ve směrovací tabulce.

Podpora klienta webového rozhraní API pro Windows Phone 8.1

Teď můžete použít balíček NuGet klienta webového rozhraní API k implementaci logiky klienta webového rozhraní API při cílení na Windows Phone 8.1 nebo z univerzální aplikace.

Známé problémy a změny způsobující chybu

Tato část popisuje známé problémy a změny způsobující chybu ve webovém rozhraní API ASP.NET 2.2.

OData v4

Tvůrce modelů

Problém: Přetížené funkce nelze vystavit jako FunctionImport

Pokud existují 2 přetížené funkce a jsou také FunctionImport, jak je znázorněno níže, výsledkem žádosti ~/GetAllConventionCustomers(CustomerName={customerName}) je System.InvalidOperationException.

<Function Name="GetAllConventionCustomers" 
ReturnType="Collection(WebStack.QA.Test.OData.UnboundOperation.ConventionCustomer)" 
IsComposable="true" />
<Function Name="GetAllConventionCustomers" 
ReturnType="Collection(WebStack.QA.Test.OData.UnboundOperation.ConventionCustomer)" 
IsComposable="true">
<Parameter Name="CustomerName" Type="Edm.String" FixedLength="false" 
Unicode="false" />
</Function>
...
<FunctionImport Name="GetAllConventionCustomers" 
Function="WebStack.QA.Test.OData.UnboundOperation.GetAllConventionCustomers" 
EntitySet="ConventionCustomers" IncludeInServiceDocument="true" />

Alternativní řešení: Alternativním řešením tohoto problému je přidat obě přetížení funkcí jako FunctionImports.

Směrování OData

Řetězcové literály, které obsahují lomítko zakódované adresou URL (%2F) a zpětné lomítko(%5C), při použití v cestách k prostředkům OData způsobí chybu 404.

Řetězcové literály lze například použít v cestách k prostředkům OData jako parametry funkcí nebo hodnot klíčů sad entit.

/Employees/Total.GetCount(Name='Name%2F')

/Employees('Name%5C')

Když služby obdrží takové požadavky, hostitelé zruší únik těchto řídicích sekvencí před jejich předáním do modulu runtime webového rozhraní API. Tím se chrání před útoky, jako jsou tyto:

http://www.contoso.com/..%2F..%2F/Windows/System32/cmd.exe?/c+dir+c:

To způsobí, že zásobník OData webového rozhraní API vrátí chybu 404 (Nenalezena). Pokud chcete této chybě zabránit, měl by klient použít dvojité řídicí sekvence pro lomítko (%252F) a zpětné lomítko (%255C). K tomu nedochází u řetězců dotazů, jako je /Employees?$filter=Name eq 'Name%2F'

Všimněte si, že lomítka bez řídicích znaků (/) a zpětná lomítka (' nejsou v řetězcových literálech cesty k prostředku OData zákonná. Lomítka by se měla zobrazovat jenom jako oddělovače cesty a zpětná lomítka by se v cestě k prostředku OData vůbec neměla zobrazovat. (Obě jsou použitelné v některých částech řetězce dotazu OData.)

Alternativní řešení: Můžete přepsat metodu Parse DefaultODataPathHandler tak, aby utekla lomítko a zpětné lomítko v řetězcových literálech před jejich vlastní analýzou. Ukázku tohoto přístupu najdete tady.

OData v3

[Dotazovatelné]

Atribut [Queryable] je zastaralý. Nové aplikace OData v3 by měly používat System.Web.Http.OData.EnableQueryAttribute.

Metoda rozšíření ODataHttpConfigurationExtensions.EnableQuerySupport teď přidá enableQueryAttribute do globální kolekce filtrů. Pokud některé kontrolery mají atribut [Queryable], volání config.EnableQuerySupport() způsobí selhání atributu [Queryable]

Doporučeným způsobem, jak tento problém vyřešit, je nahradit všechny instance QueryableAttributesystem.Web.Http.OData.EnableQueryAttribute.

Alternativním řešením je použít v konfiguraci webového rozhraní API následující kód:

config.EnableQuerySupport(new QueryableAttribute());

Směrování atributů

Problém: Vazba modelu komplexního typu, která je opatřena atributem FromUri, se při použití směrování atributů chová odlišně.

Problém: Generováním rozhraní MVC/Web API do projektu s balíčky 5.2.0 se vytvoří balíčky 5.1.2 pro balíčky, které ještě v projektu neexistují.

Aktualizace balíčků NuGet pro ASP.NET MVC 5.2 neaktualizuje nástroje sady Visual Studio, jako je například generování uživatelského rozhraní ASP.NET nebo šablona projektu ASP.NET Web Application. Používají předchozí verzi balíčků modulu runtime ASP.NET (např. 5.1.2 v aktualizaci Update 2). V důsledku toho ASP.NET generování nainstaluje předchozí verzi (např. 5.1.2 v aktualizaci Update 2) požadovaných balíčků, pokud ještě nejsou ve vašich projektech k dispozici. Generování ASP.NET v Visual Studio 2013 RTM nebo Update 1 však nepřepíše nejnovější balíčky ve vašich projektech. Pokud používáte ASP.NET generování po aktualizaci balíčků projektů na webové rozhraní API 2.2 nebo ASP.NET MVC 5.2, ujistěte se, že jsou verze webového rozhraní API a ASP.NET MVC konzistentní.

Microsoft.AspNet.OData 5.2.1

Balíček Microsoft.AspNet.OData 5.2.1 obsahuje aktualizace závislostí NuGet, ale žádné opravy chyb. S touto aktualizací už neexistuje striktní závislost na Microsoft.OData.Core 6.4.0, ale můžete upgradovat na libovolnou verzi mezi 6.4.0 a 7.0.0.

Microsoft.AspNet.WebAPI 5.2.2

V této verzi jsme provedli změnu závislosti pro Json.Net 6.0.4. Další informace o novinkách v této verzi Json.NETnástroje najdete v tématu Json.NET 6.0 Verze 4 – Sloučení JSON, Vkládání závislostí. Tato verze neobsahuje žádné další nové funkce ani opravy chyb ve webovém rozhraní API. Následně jsme aktualizovali všechny ostatní závislé balíčky, které vlastníme, aby byly závislé na této nové verzi webového rozhraní API.

Microsoft.AspNet.WebAPI 5.2.3 Beta

O vydání si můžete přečíst tady. Tato verze obsahuje pouze opravy chyb.