Request Endpoint Router¶
L’endpoint router è un Request Endpoint specializzato per la gestione di più azioni all’interno dello stesso endpoint.
A differenza di un Request Endpoint la VirtualPath
rappresenterà la path virtuale successiva al nome dell’endpoint e al nome dell’action corrente
Nota
Come nei Request Endpoint:
- Tutte le path non sono case-sensitive
- Il costruttore accetta il sistema di Service Injecting
- Il sistema supporta l’uso dell’attributo EnabledIf
- Il nome CamelCase della classe determina la struttura della route di riferimento (ExampleRouterEndpoint
risulterà in /example/router
)
Example
GET /User/Avatar/1
viene elaborata nell’endpoint User
o UserEndpoint
eseguendo l’action Avatar
o GetAvatar
ed avrà VirtualPath = '/1'
La struttura di una classe router è come segue
using PluginManager;
using PluginManager.Utils;
using WebCore.Handlers;
using WebCore.Handlers.Attributes;
namespace Example {
public class ExampleEndpoint : RequestEndpointRouter<ExampleEndpoint> {
public ExampleEndpoint(IEndpointRouterConfiguration<ExampleEndpoint> configuration)
: base(configuration) {
}
[ContentType("text/plain")]
public string GetStatus() {
return "Online";
}
[ContentType("application/json")]
public string GetConfiguration() {
return Core.Options.ToJson(DefaultJsonBehaviour.JsCamelCase);
}
[HttpHeader("X-Version", "1.0")]
public bool PostConfiguration() {
return true;
}
[ContentType("text/plain")]
[HttpHeader("X-Version", "1.0")]
public string GetNoOp() {
return null;
}
[ContentType("text/plain")]
[HttpHeader("X-Version", "1.0")]
public bool PostNoOp() {
return false;
}
}
}
In questo esempio sono state configurate le seguenti possibili richieste:
- GET /Example/Status:
Ritornerà una pagina con l’header Content-Type impostato a text/plain e contenuto “Online”
- GET /Example/Configuration:
Ritornerà una pagina con l’header Content-Type impostato ad application/json contente le opzioni correnti di sistema serializzate in JSON
- POST /Example/Configuration:
Ritornerà un response vuoto con status 200 e header personalizzato X-Version impostato a “1.0”
- GET /Example/NoOp:
Lascierà passare la richiesta al resto della pipeline senza impostare l’header personalizzato o il Content Type
- POST /Example/NoOp:
Lascierà passare la richiesta al resto della pipeline senza impostare l’header personalizzato o il Content Type
Nota
Tutte le azioni possono essere asincrone ritornando una Task<bool>
o una Task<string>
Avvertimento
Se viene aggiunta un’azione ritornante una Task ma non asincrona il valore di ritorno deve necessariamente essere non nullo
Per ritornare un valore asincrono nullo è possibile utilizzare il metodo Task.FromResult((T) null);
dove T è il tipo di ritorno