IServiceProvider Webapi Endpoint untuk pengembangan yang lebih cepat dan lebih mudah.
Jika Anda telah mendaftarkan layanan dalam koleksi dan ingin memberikan akses kepada mereka melalui HTTP, maka cukup ubah titik akhir universal seperti ini:
app . MapServiceProvider ( "services" , builder . Services ) ;
app . Run ( ) ;Sekarang Anda dapat mengirim permintaan pos/mendapatkan ke layanan Anda, seperti:
GET /services/IYourService/SomeMethod?args=["arg1","arg2","arg3"]
or
POST /services/IYourService/SomeMethod
Content-Type: application/json
["arg1","arg2","arg3"]
Contoh permintaan dengan obat generik:
GET /services/IYourService/SomeGenericMethod(Int32)?args=[111,222,333]
Permintaan menggunakan notasi URL-aman untuk jenis. Misalnya, kamus (string-array (int32)) setara dengan kamus <string, int []> .
Jika metode Anda memiliki argumen jenis objek seperti:
Task < int > ExampleMethod ( object data , CancellationToken cancellationToken ) ;Maka Anda perlu menambahkan jenis untuk pemeran sebagai parameter tambahan ke permintaan:
GET /services/IYourService/ExampleMethod/List(String)?args=[["list_item1","list_item2","list_item3"]]
Untuk mengunduh, sudah cukup bahwa metode ini mengembalikan objek stream:
Task < Stream > SomeDownloadMethod ( string a , string b , string c , CancellationToken cancellationToken ) ;Permintaan unduhan akan seperti ini:
GET /services/IYourService/SomeDownloadMethod?args=["argA","argB","argC"]
Untuk mengunggah, metode ini harus memiliki argumen tipe aliran (posisi tidak masalah):
Task SomeUploadMethod ( Stream stream , string a , string b , string c , CancellationToken cancellationToken ) ; Permintaan Unggah:
POST /services/IYourService/SomeUploadMethod?args=["argA","argB","argC"]
Content-Type: application/octet-stream
<SomeFileData>
Contoh JavaScript:
let file = document . getElementById ( 'some-input' ) . files [ 0 ] ;
let response = await fetch ( '/services/IYourService/SomeUploadMethod?args=' + encodeURIComponent ( JSON . stringify ( [ "argA" , "argB" , "argC" ] ) ) , {
method : 'POST' ,
headers : { 'content-type' : file . type || 'application/octet-stream' } ,
body : file ,
} ) ; Jika Anda tidak ingin mempublikasikan semua layanan dalam koleksi, maka cukup tambahkan filter:
app . MapServiceProvider ( "services" , builder . Services
. Where ( x => x . ServiceType . Namespace . StartsWith ( "Example" ) ) ) ;Jika otorisasi diperlukan, maka ditambahkan dengan metode standar untuk iendPointConventionBuilder:
app . MapServiceProvider ( "services" , builder . Services )
. RequireAuthorization ( ) ;Keamanan untuk metode dapat ditambahkan melalui Dekorator Penjaga:
builder . Services . AddScoped < IExampleService , ExampleService > ( ) ;
builder . Services . Decorate < IExampleService , SecureExampleService > ( ) ; Untuk terhubung ke API dari aplikasi .NET lainnya, gunakan klien yang sudah ada:
using ServiceProviderEndpoint . Client ;
using var client = new SpeClient ( "https://localhost:7149/services" ) ;
var result = await client
. GetService < IYourService > ( )
. SomeMethod ( "arg1" , "arg2" , "arg3" ) ;