Ich verwende C# 4.5 Web-API-Projekt.Wert zum Attribut basierend auf dem empfangenen Wert übergeben
Wenn ich HttpPost-Anfragen von Clients empfange, möchte ich die Anfragefelder validieren. Das Problem besteht darin, dass die Eingabevalidierung abhängig von der Eingabe selbst ist, oder, genauer gesagt, von der bereitgestellten Enumeration abhängig ist.
Unter der Annahme, ich die folgende Klasse:
public class A
{
public myEnum Filter{set;get;}
[myEnumCheckName(Filter)]
public string Name {set;get;}
[myEnumCheckEmail(Filter)]
public string Email {set;get;}
}
public enum myEnum {ByName = 1, ByEmail = 2}
Und auch schrieb ich 2 validatorAttributes:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
public class myEnumCheckName : ValidationAttribute
{
private readonly someNameValidator _validator = new someNameValidator();
private readonly myEnum _filter;
public myEnumCheckName(myEnum filter)
{
_filter = filter;
}
public override bool IsValid(object value)
{
if (_filter == myEnum.ByName)
return _validator.IsValid(value);
return true;
}
}
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
public class myEnumCheckEmail : ValidationAttribute
{
private readonly someEmailValidator _validator = new someEmailValidator();
private readonly myEnum _filter;
public myEnumCheckEmail(myEnum filter)
{
_filter = filter;
}
public override bool IsValid(object value)
{
if (_filter == myEnum.ByEmail)
return _validator.IsValid(value);
return true;
}
}
Problem ist, dass wenn ich [myEnumCheckName(myEnum)
versuchen nennen es sagt:
Can not Auf statische Eigenschaft myEnum im statischen Kontext zugreifen.
Gibt es trotzdem Zugriff auf die Instanz/aktuellen Kontextfeldwerte?
Danke.
KLARSTELLUNG
ich die Name
und Email
Eigenschaften überprüfen möchten, das ist die allgemeine Idee. Nun, ich habe nichts dagegen, wenn Name
wäre Null, wenn der Filter
Wert wird ByEmail
und umgekehrt. Auf diese Weise muss ich nicht die gleiche Methode schreiben, die die Anfrage zweimal behandelt.
Bitte lesen Sie [ask] und stellen Sie eine [mcve] bereit Ihr erster Codeblock ist voll von Syntaxfehlern. Untersuchen Sie auch den _actual_ Fehler, den Sie erhalten. Das Problem besteht darin, dass Sie einen Mitgliedsnamen haben, der dem Aufzählungsnamen entspricht. Verwenden Sie den vollständigen Namespace der Enumeration im Attribut. – CodeCaster
Es ist nicht klar, was Sie erreichen möchten. Möchten Sie überprüfen, ob das Feld 'Name' nicht leer ist, sondern nur, wenn der angegebene Aufzählungswert gleich 'ByName' ist? Bitte klären Sie. Außerdem fehlt Ihren Attributdeklarationen eine abschließende eckige Klammer, sodass CodeCaster richtig ist. –
@FedericoDipuma Sie verstanden es gut. und CodeCaster ist richtig, wenn ich 2 Klammern verpasst habe, aber es ist kein Grund, eine Frage zu verwerfen und zu behaupten, dass nur aufgrund dieser 2 Klammern meine gesamte Frage nicht gut geschrieben ist.Auch eine zusätzliche Klärung in Frage –