0

Ich habe ein Projekt mit einer Web-API, einer Web-App und Xamarin Apps. Sie alle sollten dasselbe Datenmodell verwenden, das in einer AspNetCore-Bibliothek gespeichert ist. Ich möchte EF Core für die Datenbank verwenden und ich habe ein DB Managing-Projekt (auch eine AspNetCore-Bibliothek), die sich auf EF Core bezieht und den Kontext und das Setup enthält. Die Web-API ist das einzige Projekt, das auf dieses DB-Management-Projekt verweist, da es den gesamten Datenbankzugriff abwickelt. Alle anderen Apps kontaktieren die Web-API zur Dateninteraktion.Projektarchitektur mit Xamarin und Asp.Net Core Identity

Mein Problem: Ich möchte AspNetCore.Identity für meine Benutzerverwaltung verwenden, aber die Xamarin Apps können nicht auf das Datenmodell verweisen, wenn es AspNetCore.Identity verwendet. Wie kann ich das lösen?

Antwort

6

Ihr Xamarin-Code sollte vollständig von der Server-Business-Logik und dem Datenzugriff entkoppelt sein. Warum sollten Sie AspNet Identity von Xamarin referenzieren? Das sind zwei völlig unterschiedliche Schichten.

Ihre Server-Web-API muss REST-Methoden bereitstellen, um Authentifizierung/Autorisierung und andere Dinge zu handhaben, damit ein Client sie konsumieren kann (Webclient, mobiler Client, Desktop-Client, was auch immer).

Xamarin sollte diese Remote-Methoden mit einem REST client verbrauchen, in der gleichen Weise würde ein JavaScript-Client.

Ich verstehe von Ihrer Frage, dass Sie Business-Objekte/Modelle in Ihrem Xamarin-Projekt wiederverwenden möchten, nur weil sie in C# geschrieben sind. Aber wenn diese Objekte Abhängigkeiten von asp.net-Identität haben, können Sie nicht. In diesem Fall sollten Sie Ihre Business-Objekte (BO) map zu Datenübertragungsobjekten (DTO), die Web-API für die Kommunikation mit Clients verwendet. DTO's sind von jeder Datenzugriffsebene völlig agnostisch und sollten einfach POCO sein. Sie sollen zu/von json/xml serialisiert/deserialisiert werden.

Auf der anderen Seite wollen Sie Benutzermodelle nicht "wie sie sind" über eine Web-API serialisieren, weil das bedeutet, dass sensible Daten über das Internet gesendet werden, wie Benutzer Passwörter hashed, etc. Ihre DTOs sollten nur haben Felder benötigt in Ihrem Client, und das Mapping wird den Rest erledigen.