Bagikan melalui


Yang Baru di ASP.NET Web API 2.2

oleh Microsoft

Topik ini menjelaskan apa yang baru untuk ASP.NET Web API 2.2.

Unduh

Fitur runtime dirilis sebagai paket NuGet di galeri NuGet. Semua paket runtime mengikuti spesifikasi Penerapan Versi Semantik . Paket ASP.NET Web API 2.2 terbaru memiliki versi berikut: "5.2.0". Anda dapat menginstal atau memperbarui paket ini melalui NuGet. Rilis ini juga mencakup paket lokal yang sesuai di NuGet.

Anda dapat menginstal atau memperbarui ke paket NuGet yang dirilis dengan menggunakan NuGet Package Manager Console:

Install-Package Microsoft.AspNet.WebApi -Version 5.2.0

Dokumentasi

Tutorial dan informasi lain tentang ASP.NET Web API 2.2 tersedia dari situs web ASP.NET (https://www.asp.net/web-api).

Fitur Baru di ASP.NET Web API 2.2

OData v4

Rilis ini menambahkan dukungan untuk protokol OData v4. Untuk informasi selengkapnya, lihat dokumentasi Web API OData v4.

Berikut adalah beberapa fitur dan perubahan utama untuk OData v4:

Peningkatan Perutean Atribut

Perutean Atribut sekarang menyediakan titik ekstensibilitas yang disebut IDirectRouteProvider, yang memungkinkan kontrol penuh atas bagaimana rute atribut ditemukan dan dikonfigurasi. IDirectRouteProvider bertanggung jawab untuk menyediakan daftar tindakan dan pengontrol bersama dengan informasi rute terkait untuk menentukan dengan tepat konfigurasi perutean apa yang diinginkan untuk tindakan tersebut. Implementasi IDirectRouteProvider dapat ditentukan saat memanggil MapAttributes/MapHttpAttributeRoutes.

Menyesuaikan IDirectRouteProvider akan paling mudah dengan memperluas implementasi default kami, DefaultDirectRouteProvider. Kelas ini menyediakan metode virtual yang dapat diganti terpisah untuk mengubah logika untuk menemukan atribut, membuat entri rute, dan menemukan awalan rute dan awalan area.

Berikut adalah beberapa contoh tentang apa yang dapat Anda lakukan dengan titik ekstensibilitas baru ini:

  1. Mendukung pewarisan atribut Rute

    Contoh:

    Di sini permintaan seperti "/api/values/10" akan berhasil mengembalikan "Success: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. Berikan nama rute default untuk rute atribut Anda dengan mengikuti beberapa konvensi yang Anda sukai. Secara default, perutean atribut tidak secara otomatis membuat nama untuk rute atribut.

  3. Ubah templat rute rute atribut di satu tempat pusat sebelum berakhir di tabel rute.

Dukungan Klien API Web untuk Windows Phone 8.1

Anda sekarang dapat menggunakan paket NuGet Klien API Web untuk mengimplementasikan logika klien API Web Anda saat menargetkan Windows Phone 8.1 atau dari dalam Aplikasi Universal.

Masalah yang Diketahui dan Perubahan yang Melanggar

Bagian ini menjelaskan masalah yang diketahui dan melanggar perubahan di ASP.NET Web API 2.2.

OData v4

Pembuat model

Masalah: Fungsi Kelebihan Beban tidak dapat diekspos sebagai FunctionImport

Jika ada 2 fungsi yang kelebihan beban dan fungsi juga FunctionImport seperti yang ditunjukkan di bawah ini maka meminta ~/GetAllConventionCustomers(CustomerName={customerName}) menghasilkan 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" />

Solusi sementara: Solusi untuk masalah ini adalah menambahkan kedua fungsi kelebihan beban sebagai FunctionImports.

Perutean OData

Literal string yang menyertakan garis miring yang dikodekan URL (%2F), dan garis miring terbelakang (%5C) menyebabkan kesalahan 404 saat digunakan di jalur sumber daya OData.

Misalnya, literal string dapat digunakan di jalur sumber daya OData sebagai parameter fungsi atau nilai kunci set entitas.

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

/Employees('Name%5C')

Ketika layanan menerima permintaan tersebut, host akan membatalkan escape urutan escape tersebut sebelum meneruskannya ke runtime Web API. Ini melindungi dari serangan seperti berikut:

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

Ini menyebabkan tumpukan OData API Web mengembalikan kesalahan 404 (Tidak Ditemukan). Untuk mencegah kesalahan ini, klien Anda harus menggunakan urutan escape ganda untuk garis miring (%252F) dan garis miring terbelakang (%255C). Ini tidak terjadi untuk string kueri seperti /Employees?$filter=Name eq 'Name%2F'

Perhatikan bahwa garis miring yang tidak lolos ('/') dan garis miring terbelakang ('') tidak legal dalam string jalur sumber daya OData literal. Garis miring akan muncul hanya sebagai pemisah jalur dan garis miring terbalik tidak boleh muncul di jalur sumber daya OData sama sekali. (Keduanya dapat digunakan dalam beberapa bagian string kueri OData.)

Solusi sementara: Anda dapat mengambil alih metode Uraikan DefaultODataPathHandler untuk menghindari garis miring dan garis miring terbalik dalam literal string sebelum benar-benar mengurainya. Anda dapat menemukan sampel pendekatan ini di sini.

OData v3

[Dapat dikueri]

Atribut [Queryable] tidak digunakan lagi. Aplikasi OData v3 baru harus menggunakan System.Web.Http.OData.EnableQueryAttribute.

Metode ekstensi ODataHttpConfigurationExtensions.EnableQuerySupport sekarang menambahkan EnableQueryAttribute ke koleksi filter global. Jika ada pengontrol yang memiliki atribut [Queryable] , panggilan config.EnableQuerySupport() akan menyebabkan atribut [Queryable] gagal

Cara yang disarankan untuk mengatasi masalah ini adalah dengan mengganti semua instans QueryableAttribute dengan System.Web.Http.OData.EnableQueryAttribute.

Solusi alternatifnya adalah menggunakan kode berikut dalam konfigurasi API Web Anda:

config.EnableQuerySupport(new QueryableAttribute());

Perutean Atribut

Masalah: Pengikatan model jenis kompleks yang dihiasi dengan atribut FromUri bersifat berbeda saat menggunakan Perutean Atribut.

Masalah: Perancah MVC/Web API ke dalam proyek dengan paket 5.2.0 menghasilkan paket 5.1.2 untuk yang belum ada dalam proyek

Memperbarui paket NuGet untuk ASP.NET MVC 5.2 tidak memperbarui alat Visual Studio seperti perancah ASP.NET atau templat proyek Aplikasi Web ASP.NET. Mereka menggunakan versi sebelumnya dari paket runtime ASP.NET (misalnya 5.1.2 di Pembaruan 2). Akibatnya, perancah ASP.NET akan menginstal versi sebelumnya (misalnya 5.1.2 di Pembaruan 2) dari paket yang diperlukan, jika belum tersedia di proyek Anda. Namun, perancah ASP.NET di Visual Studio 2013 RTM atau Pembaruan 1 tidak menimpa paket terbaru dalam proyek Anda. Jika Anda menggunakan perancah ASP.NET setelah memperbarui paket proyek Anda ke Web API 2.2 atau ASP.NET MVC 5.2, pastikan versi Web API dan ASP.NET MVC konsisten.

Microsoft.AspNet.OData 5.2.1

Paket Microsoft.AspNet.OData 5.2.1 berisi pembaruan dependensi NuGet tetapi tidak ada perbaikan bug. Dengan pembaruan ini, tidak ada lagi dependensi yang ketat pada Microsoft.OData.Core 6.4.0, tetapi seseorang dapat meningkatkan ke versi apa pun antara 6.4.0 dan 7.0.0.

Microsoft.AspNet.WebAPI 5.2.2

Dalam rilis ini kami telah membuat perubahan dependensi untuk Json.Net 6.0.4. Untuk informasi selengkapnya tentang apa yang baru dalam rilis Json.NETini, lihat Json.NET 6.0 Rilis 4 - JSON Merge, Dependency Injection. Rilis ini tidak memiliki fitur baru atau perbaikan bug lainnya di Web API. Kami kemudian telah memperbarui semua paket dependen lainnya yang kami miliki untuk bergantung pada versi baru Web API ini.

Microsoft.AspNet.WebAPI 5.2.3 Beta

Anda dapat membaca tentang rilis di sini. Rilis ini hanya berisi perbaikan bug.