IserviceProvider WebAPI -Endpunkt für eine schnellere und einfachere Entwicklung.
Wenn Sie bereits Dienste in der Sammlung registriert haben und über HTTP Zugriff auf sie zugreifen möchten, kartieren Sie einfach einen universellen Endpunkt wie folgt:
app . MapServiceProvider ( "services" , builder . Services ) ;
app . Run ( ) ;Jetzt können Sie Post-/Get -Anfragen an Ihre Dienste senden, z. B.:
GET /services/IYourService/SomeMethod?args=["arg1","arg2","arg3"]
or
POST /services/IYourService/SomeMethod
Content-Type: application/json
["arg1","arg2","arg3"]
Beispielanforderung mit Generika:
GET /services/IYourService/SomeGenericMethod(Int32)?args=[111,222,333]
Anfragen verwenden URL-Safe-Notation für Typen. Zum Beispiel ist Dictionary (String-Array (int32)) gleichwertig mit dem Wörterbuch <String, int []> .
Wenn Ihre Methode Objekttyp -Argumente hat wie:
Task < int > ExampleMethod ( object data , CancellationToken cancellationToken ) ;Anschließend müssen Sie den Typ für Guss als zusätzlichen Parameter zur Anforderung hinzufügen:
GET /services/IYourService/ExampleMethod/List(String)?args=[["list_item1","list_item2","list_item3"]]
Zum Herunterladen reicht es aus, dass die Methode ein Stream -Objekt zurückgibt:
Task < Stream > SomeDownloadMethod ( string a , string b , string c , CancellationToken cancellationToken ) ;Die Download -Anfrage ist wie folgt:
GET /services/IYourService/SomeDownloadMethod?args=["argA","argB","argC"]
Zum Hochladen muss die Methode ein Argument des Typs des Typs haben (Position spielt keine Rolle):
Task SomeUploadMethod ( Stream stream , string a , string b , string c , CancellationToken cancellationToken ) ; Anfrage hochladen:
POST /services/IYourService/SomeUploadMethod?args=["argA","argB","argC"]
Content-Type: application/octet-stream
<SomeFileData>
JavaScript -Beispiel:
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 ,
} ) ; Wenn Sie nicht alle Dienste in der Sammlung veröffentlichen möchten, fügen Sie einfach einen Filter hinzu:
app . MapServiceProvider ( "services" , builder . Services
. Where ( x => x . ServiceType . Namespace . StartsWith ( "Example" ) ) ) ;Wenn die Autorisierung benötigt wird, wird sie von der Standardmethode für iendpointConventionBuilder hinzugefügt:
app . MapServiceProvider ( "services" , builder . Services )
. RequireAuthorization ( ) ;Die Sicherheit für Methoden kann über Scutrutor-Dekoratoren hinzugefügt werden:
builder . Services . AddScoped < IExampleService , ExampleService > ( ) ;
builder . Services . Decorate < IExampleService , SecureExampleService > ( ) ; Verwenden Sie einen vorhandenen Client, um eine Verbindung zu API von einer anderen .NET -Anwendung herzustellen:
using ServiceProviderEndpoint . Client ;
using var client = new SpeClient ( "https://localhost:7149/services" ) ;
var result = await client
. GetService < IYourService > ( )
. SomeMethod ( "arg1" , "arg2" , "arg3" ) ;