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