Hallo
Verstehe ich es richtig, du willst Json Posten auf ein "Controller" und kein Model für die einzelnen Parameter erstellen?
Wenn du das wirklich machen willst, kannst du dies indem du eine "JsonValueProviderFactory" registirert und ein "JsonValueProvider".
Somit kannst du den Support für Json nachträglich wieder einbauen 😉.
In der JsonValueProviderFactory liest du den Request aus, schaust ob es Json ist, deserialisiert den Inhalt und prüfst ob bspw. die Anzahl Parameter passen und deren Namen.... Sollte das alles passen, kannst du dem Context den JsonValueProvider mitgeben, etwa so:
public class JsonValueProviderFactory : IValueProviderFactory
{
public async Task CreateValueProviderAsync(ValueProviderFactoryContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
//we are only interested in "body" attribute since we are extracting the body, ignore from Query Attribute
var parameters = context.ActionContext.ActionDescriptor.Parameters.Where(r => r.BindingInfo?.BindingSource?.Id != BindingSource.Query.Id).ToList();
//do validation, read stream body, check if json, deserialize ... wenn nun alles passt
context.ValueProviders.Add(new JsonValueProvider(jObject));
}
}
Der JsonValueProvider kann dann etwa so aussehen
public class JsonValueProvider : IValueProvider
{
private readonly JObject m_jObject;
public JsonValueProvider(JObject jObject)
{
m_jObject = jObject;
}
public bool ContainsPrefix(string prefix)
{
return m_jObject.ContainsKey(prefix);
}
public ValueProviderResult GetValue(string key)
{
return new ValueProviderResult(new StringValues((string)m_jObject[key]));
}
}
Nicht vergessen die JsonValueFactory zu registrieren im Startup
options.ValueProviderFactories.Add(new JsonValueProviderFactory());
Viel Spass
Hallo FrankyD95
Ich würde ein ViewModel erstellen. Dieses kann bspw. ein Property haben "bool Authorized". Alle Buttons binden Ihr Enabled Property nun auf dieses ViewModel Property "Authorized".
Edit:
Databinding
Wenn die Schriftart vorhanden ist, kannst du sie mit dem Namen ansprechen (siehe Font ctor). Sonst kannst du ein Pfad angeben wo diese gefunden wird.
Lg
Hallo
Es gibt dafür einige Komponenten welche das können, wenn du nach "replace fonts in pdf c#" googelst, findest du diese 🙂
Ich würde das nicht selbst machen wollen, hoffe du kannst eine fertige Komponente einsetzen.
Am einfachsten ist das Vorgehen etwa so:
Wenn du dies nur für gewisse Texte machen willst etwa so:
Beispiele:
Spire PDF
Syncfusion
Aspose
usw....
Hallo Kriz
Ich würde Dir von FTP abraten (auch von den sichereren Varianten wie FTPS oder SFTP). Nutze dafür besser eine REST API (bspw. ASP.NET Core Web Api) und lege die Bilder in einem BlobStorage ab. Die Authentifizierung kannst du da bspw. über ein Token im Header machen... (OAuth, ...)
Nun zu Deiner Frage. Dein Controller könnte die ersten paar bytes auslesen und daran erkennen ob es sich um ein Bild handelt.
(Achtung bei sehr vielen Requests könnte das recht Memory intensiv werden 😉)
Beste Grüsse
Diräkt
Ein Kumpel meinte es wäre besser das mit SignalR
Irgendwo brauchst du ein Backend um Pub/Sub (siehe erste Antwort) zu managen. SignalR kannst du im Frontend einsetzen um anhand von Notifications eines WebHook im GUI etwas anzuzeigen oder was anderes zu wurschteln 🙂
Woanders bekam ich den Vorschlag es mit SSE
Hier sind die Unterschiede erklärt.
Beste Grüsse
Guten Tag
Eigentlich stellst du Events zur Verfügung. Die Subscriber können solche abonnieren um über "Änderungen" informiert zu werden. Dafür kannst du bspw. ein Pub/Sub Pattern verwenden.
Ein schöner Artikel mit ausführlichen Beschreibung findest du in diesem Blog.
Liebe Grüsse
Hallo Krumnix
Ich würde Dir empfehlen, dass File gar nicht zu speichern sondern bei Bedarf "on-the-fly" zu generieren.
Um auf Deine Frage einzugehen:
Da gibt es sehr viele Wege dazu, vom einfachen string.Replace() bis hin zu "data templating".
Als Idee, schau Dir mal folgendes an:
templated-serialization-of-c-sharp-objects-to-json
https://www.abhishek-tiwari.com/jsonnet-a-data-templating-language-from-google/
Ich möchte eine eigene Implementierung für ClientValidatorCache verwenden.
Problem:
-> Die Klasse besitzt kein Interface
-> Die Methode GetValidators ist nicht virtual
-> _cacheEntries ist private
Was ich versucht habe:
-> Von der Klasse erben und GetValidators "hiden" mit new GetValidators(...)
Es wird zwar meine Klasse verwendet jedoch klappt das "hiden" nicht wirklich, es wird die Basis-Methode aufgerufen.
Jemand eine Idee?
Ziel:
-> Properties von meinem Model können zur Laufzeit bspw. mit "Required" markiert werden. Serverseitig funktioniert alles (ModelBinder sind ja schön erweiterbar ...), jedoch werden die client-validatoren gecached und ClientValidatorCache ist nicht wirklich gut erweiterbar... Dies führt dazu, dass der gecachte validator benutzt wird ungeachtet der neuen ValidationMetaData.
Framework:
asp.net core 3.1
Hallo Darkblue94
Du könntest bspw. ein Enum erstellen ? l? :
None = 0,
Januar =1,
Februar =2
....
Dann könntest du den String in den Enum parsen und damit rechnen.
(MyEnum)Enum.Parse(typeof(MyEnum), stringInput);
Ich würde mir überlegen anstatt TextBoxen dann gleich DropDowns zu verwenden, dann kannst du den Value definieren. Dann könntest aber auch auf den Enum verzichten und als Value für Januar gleich 1 verwenden.
Beste Grüsse
Diräkt