ASP Core, Windows und andere Hindernisse

ASP.NET Core auf einer Windows Maschine für einen Linuxserver entwickeln, das geht? Wie konfiguriere ich das System? Kann ich einen Entwicklungsstand, sowie einen Produktivstand gleichzeitig laufen lassen? Diese Fragen und noch weitere werden im Vortrag beantwortet.

Über ASP Core

ASP Core ist ein Framework zum entwickeln von Server Anwendungen und mit der Entwicklung für .Net Core oder der den .Net Standart 2.0 ist es Platformunabhängig und kann auf den gängigsten Systemen verwendet werden.

Die Serveranwendung kann standardmäßig über IIS, Apache, NGINX etc. bereitgestellt werden als auch über einen eigenen Host Process. Die Platformunabhängige Implemntierung heißt Kestrel aber ASP Core kann auch in eingenen Serverimplementierungen benutzt werden solange diese ein "Open Web Interface for .NET" OWIN Interface bereitstellen.

Nennenswerte Features von ASP Core sind:

  • Dependecy Injection
  • Smart Controller Mapping to HTTP Requests
  • Open Source
  • Schnittstellen für fast jede Funktion und Service
  • Templates für Angular, React und Bootstrap
  • Umfangreiches Konfigurationssystem mit Cloudunterstützung
  • Eine DTO/Model Datenvalidierung
  • JavaScriptServices

Dependency Injection

Es ist möglich Schnittstellen konkrete Implementierungen zuzuordnen welche an die passenden Konstruktoren übergeben werden.

  • Ein Transient Service erzeugt eine Instanz der konkreten Implementierung für jeden Request.
  • Ein Scoped Service erzeugt eine Instanz für einen Request einmal.
  • Ein Singleton Service erzeugt wie der Name vermuten lässt die Instanz einer konkreten Implementierung ein einziges mal.
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseInMemoryDatabase()
    );

    // Add framework services.
    services.AddMvc();

    // Register application services.
    services.AddScoped<ICharacterRepository, CharacterRepository>();
    services.AddTransient<IOperationTransient, Operation>();
    services.AddScoped<IOperationScoped, Operation>();
    services.AddSingleton<IOperationSingleton, Operation>();
    services.AddSingleton<IOperationSingletonInstance>(new Operation(Guid.Empty));
    services.AddTransient<OperationService, OperationService>();
}

Datavalidation src

Für die Übertragung genutzte Daten können mit Validationsattributen ausgezeichnet werden um die Daten eines HTTP Requests durch ASP Validieren zu lassen.

public class Movie
{
    public int Id { get; set; }

    [Required]
    [StringLength(100)]
    public string Title { get; set; }

    [ClassicMovie(1960)]
    [DataType(DataType.Date)]
    public DateTime ReleaseDate { get; set; }

    [Required]
    [StringLength(1000)]
    public string Description { get; set; }

    [Range(0, 999.99)]
    public decimal Price { get; set; }

    [Required]
    public Genre Genre { get; set; }

    public bool Preorder { get; set; }
}
  • [CreditCard]: überprüft, ob die Eigenschaft über ein Kreditkartenformat verfügt.
  • [Compare]: überprüft, ob zwei Eigenschaften in einem Modell miteinander übereinstimmen.
  • [EmailAddress]: überprüft, ob die Eigenschaft über ein E-Mail-Format verfügt.
  • [Phone]: überprüft, ob die Eigenschaft über ein Telefonformat verfügt.
  • [Range]: überprüft, ob der Eigenschaftenwert im vorgegebenen Bereich liegt.
  • [RegularExpression]: überprüft, ob die Daten mit dem angegebenen regulären Ausdruck übereinstimmt.
  • [Required]: legt eine Eigenschaft als erforderlich fest.
  • [StringLength]: überprüft, ob eine Zeichenfolgeneigenschaft die maximale Länge nicht überschreitet.
  • [Url]: überprüft, ob die Eigenschaft über ein URL-Format verfügt.

Windows, Visual Studio Code, ASP Core, Docker, Linux

Anforderungen:

See this