ASP.NET Web API 2.2 Sürümündeki Yenilikler

Microsoft tarafından

Bu konuda, ASP.NET Web API 2.2'ye yönelik yenilikler açıklanmaktadır.

İndir

Çalışma zamanı özellikleri, NuGet galerisinde NuGet paketleri olarak yayımlanmaktadır. Tüm çalışma zamanı paketleri AnlamSal Sürüm Oluşturma belirtimini izler. En son ASP.NET Web API 2.2 paketi şu sürüme sahiptir: "5.2.0". NuGet aracılığıyla bu paketleri yükleyebilir veya güncelleştirebilirsiniz. Sürüm, NuGet'te karşılık gelen yerelleştirilmiş paketleri de içerir.

NuGet Paket Yöneticisi Konsolu'nu kullanarak yayımlanan NuGet paketlerini yükleyebilir veya güncelleştirebilirsiniz:

Install-Package Microsoft.AspNet.WebApi -Version 5.2.0

Belgeler

ASP.NET Web API 2.2 ile ilgili öğreticiler ve diğer bilgileri ASP.NET web sitesinden (https://www.asp.net/web-api ) edinebilirsiniz.

ASP.NET Web API 2.2'deki Yeni Özellikler

OData v4

Bu sürüm, OData v4 protokolü için destek ekler. Daha fazla bilgi için Web API OData v4 belgelerine bakın.

OData v4 için bazı önemli özellikler ve değişiklikler şunlardır:

Öznitelik Yönlendirme Geliştirmeleri

Öznitelik Yönlendirme artık öznitelik yollarının nasıl bulunup yapılandırıldığı üzerinde tam denetim sağlayan IDirectRouteProvider adlı bir genişletilebilirlik noktası sağlar. IDirectRouteProvider, bu eylemler için tam olarak hangi yönlendirme yapılandırmasının isteneceğini belirtmek üzere ilişkili yol bilgileriyle birlikte bir eylem ve denetleyici listesi sağlamakla sorumludur. MapAttributes/MapHttpAttributeRoutes çağrılırken bir IDirectRouteProvider uygulaması belirtilebilir.

Varsayılan uygulamamız DefaultDirectRouteProvider'ı genişleterek IDirectRouteProvider'ı özelleştirmek en kolay seçenek olacaktır. Bu sınıf, öznitelikleri bulma, yol girdileri oluşturma ve yol ön eki ile alan ön ekini bulma mantığını değiştirmek için ayrı geçersiz kılınabilir sanal yöntemler sağlar.

Bu yeni genişletilebilirlik noktasıyla yapabileceklerinizle ilgili bazı örnekler aşağıda verilmiştir:

  1. Route özniteliklerinin devralınmayı destekleme

    Örnek:

    Burada "/api/values/10" gibi bir istek başarıyla "Success:10" döndürür

    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. Beğendiğiniz bazı kuralları izleyerek öznitelik yollarınız için varsayılan bir yol adı sağlayın. Varsayılan olarak, öznitelik yönlendirmesi öznitelik yolları için adları otomatik olarak oluşturmaz.

  3. Yol tablosuna gelmeden önce öznitelik yollarının yol şablonunu tek bir merkezi konumda değiştirin.

Windows Phone 8.1 için Web API İstemci Desteği

Artık Windows Phone 8.1'i hedeflerken veya Evrensel Uygulama içinden Web API istemci mantığınızı uygulamak için Web API İstemcisi NuGet paketini kullanabilirsiniz.

Bilinen Sorunlar ve Hataya Neden Olan Değişiklikler

Bu bölümde, ASP.NET Web API 2.2'deki bilinen sorunlar ve hataya neden olan değişiklikler açıklanmaktadır.

OData v4

Model oluşturucu

Sorun: Aşırı Yüklenmiş İşlevler FunctionImport olarak gösterilemedi

2 aşırı yüklenmiş işlev varsa ve bunlar aşağıda gösterildiği gibi FunctionImport işleviyse ~/GetAllConventionCustomers(CustomerName={customerName}) istenmesi System.InvalidOperationException ile sonuçlanır.

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

Geçici çözüm: Bu sorunun geçici çözümü, her iki işlev aşırı yüklemesini de FunctionImports olarak eklemektir.

OData Yönlendirme

URL kodlanmış eğik çizgi (%2F) ve ters eğik çizgi (%5C) içeren dize değişmez değerleri, OData kaynak yollarında kullanıldıklarında 404 hatasına neden olur.

Örneğin, dize değişmez değerleri OData kaynak yollarında işlevlerin parametreleri veya varlık kümelerinin anahtar değerleri olarak kullanılabilir.

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

/Employees('Name%5C')

Hizmetler bu tür istekler aldığında, konaklar bu kaçış dizilerini Web API çalışma zamanına geçirmeden önce kaçışı kaldıracaktır. Bu, aşağıdaki gibi saldırılara karşı koruma sağlar:

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

Bu, Web API OData yığınının 404 hatası (Bulunamadı) döndürmesine neden olur. Bu hatayı önlemek için istemciniz eğik çizgi (%252F) ve ters eğik çizgi (%255C) için çift kaçış dizilerini kullanmalıdır. /Employees?$filter=Name eq 'Name%2F' gibi sorgu dizeleri için bu durum gerçekleşmez

Kaçışsız eğik çizgilerin ('/') ve ters eğik çizgilerinin ('') OData kaynak yolu dize sabit değerlerinde yasal olmadığını unutmayın. Eğik çizgiler yalnızca yol ayırıcıları olarak görünmelidir ve ters eğik çizgiler OData kaynak yolunda hiç görüntülenmemelidir. (Her ikisi de OData sorgu dizesinin bazı bölümlerinde kullanılabilir.)

Geçici çözüm: DefaultODataPathHandler'ın Ayrıştırma yöntemini geçersiz kılarak dize değişmez değerlerinde eğik çizgi ve ters eğik çizgiden kaçış sağlayabilirsiniz. Bu yaklaşımın bir örneğini burada bulabilirsiniz.

OData v3

[Sorgulanabilir]

[Queryable] özniteliği kullanım dışı bırakıldı. Yeni OData v3 uygulamaları System.Web.Http.OData.EnableQueryAttribute kullanmalıdır.

ODataHttpConfigurationExtensions.EnableQuerySupport uzantısı yöntemi artık genel filtre koleksiyonuna bir EnableQueryAttribute ekler. Herhangi bir denetleyici [Queryable] özniteliğine sahipse, çağırma config.EnableQuerySupport()[Queryable] özniteliğinin başarısız olmasına neden olur

Bu sorunu çözmenin önerilen yolu , QueryableAttribute'un tüm örneklerini System.Web.Http.OData.EnableQueryAttribute ile değiştirmektir.

Alternatif bir geçici çözüm, Web API yapılandırmanızda aşağıdaki kodu kullanmaktır:

config.EnableQuerySupport(new QueryableAttribute());

Öznitelik Yönlendirme

Sorun: FromUri özniteliğiyle süslenmiş karmaşık türün model bağlaması, Öznitelik Yönlendirme kullanılırken farklı davranır.

Sorun: MVC/Web API'sini 5.2.0 paketleriyle bir projeye iskelesi oluşturmak, projede henüz mevcut olmayanlar için 5.1.2 paketleriyle sonuçlandı

ASP.NET MVC 5.2 için NuGet paketlerinin güncelleştirilmesi, ASP.NET yapı iskelesi veya ASP.NET Web Uygulaması proje şablonu gibi Visual Studio araçlarını güncelleştirmez. ASP.NET çalışma zamanı paketlerinin önceki sürümünü kullanırlar (örneğin, Güncelleştirme 2'de 5.1.2). Sonuç olarak, ASP.NET iskelesi, projelerinizde zaten mevcut değilse gerekli paketlerin önceki sürümünü (güncelleştirme 2'de 5.1.2 gibi) yükler. Ancak, Visual Studio 2013 RTM veya Güncelleştirme 1'deki ASP.NET yapı iskelesi, projelerinizdeki en son paketlerin üzerine yazılmaz. Projelerinizin paketlerini Web API 2.2 veya ASP.NET MVC 5.2'ye güncelleştirdikten sonra ASP.NET yapı iskelesi kullanıyorsanız, Web API ve ASP.NET MVC sürümlerinin tutarlı olduğundan emin olun.

Microsoft.AspNet.OData 5.2.1

Microsoft.AspNet.OData 5.2.1 paketi NuGet bağımlılık güncelleştirmelerini içerir ancak hata düzeltmesi içermez. Bu güncelleştirme ile artık Microsoft.OData.Core 6.4.0'a katı bir bağımlılık yoktur, ancak 6.4.0 ile 7.0.0 arasında herhangi bir sürüme yükseltilebilir.

Microsoft.AspNet.WebAPI 5.2.2

Bu sürümde için Json.Net 6.0.4bir bağımlılık değişikliği yaptık. bu sürümündeki Json.NETyenilikler hakkında daha fazla bilgi için bkz. Json.NET 6.0 Sürüm 4 - JSON Birleştirme, Bağımlılık Ekleme. Bu sürümde Web API'sinde başka yeni özellik veya hata düzeltmeleri yoktur. Daha sonra sahip olduğumuz diğer tüm bağımlı paketleri, Web API'sinin bu yeni sürümüne bağlı olacak şekilde güncelleştirdik.

Microsoft.AspNet.WebAPI 5.2.3 Beta

Sürüm hakkında buradan bilgi edinebilirsiniz. Bu sürüm yalnızca hata düzeltmeleri içerir.