suchen
HeimBackend-EntwicklungC#.Net-TutorialMehrere Methoden zur ASP.NET MVC-Hintergrundparameterüberprüfung

Vorwort

Die Parameterüberprüfung ist ein häufiges Problem. Unabhängig davon, ob es sich um das Front-End oder das Back-End handelt, müssen Benutzereingaben überprüft werden, um die Richtigkeit der Systemdaten sicherzustellen. Für das Web möchten einige Leute es vielleicht einfach am Front-End überprüfen, aber das ist ein völlig falscher Ansatz. Der Front-End-Code ist für Benutzer transparent, und Leute mit ein wenig Technologie können ihn umgehen Führen Sie diese Überprüfung durch und übermitteln Sie die Daten direkt hinter die Kulissen. Unabhängig davon, ob es sich um die von der Front-End-Webseite übermittelte Schnittstelle oder die nach außen bereitgestellte Schnittstelle handelt, ist die Parameterüberprüfung überall sichtbar und unerlässlich. Kurz gesagt: Alle Benutzereingaben sind nicht vertrauenswürdig.

Es gibt viele Möglichkeiten, die Parameterüberprüfung durchzuführen. Im Folgenden werden mehrere gängige Überprüfungsmethoden anhand von mvc aufgelistet.

[HttpPost]
public ActionResult Register(RegisterInfo info)

1. Beurteilung durch if-if

if(string.IsNullOrEmpty(info.UserName))
 
{
 
  return FailJson("用户名不能为空");
 
}
 
if(string.IsNullOrEmpty(info.Password))
 
{
 
  return FailJson("用户密码不能为空")
 
}

Diese Methode ist die gröbste, aber bei damals unter WebForm Es wurde tatsächlich auf diese Weise verwendet. Für die Methode mit wenigen Parametern ist es in Ordnung, n weitere Wenn-Wenns zu schreiben. Noch wichtiger ist, dass dieser Teil der Beurteilung nicht wiederverwendet werden kann.

2. Durch DataAnnotation

mvc stellt DataAnnotation zur Überprüfung des Aktionsmodells bereit. Letztendlich handelt es sich bei DataAnnotation um eine Reihe von Merkmalen, die ValidationAttribute erben, wie z. B. RangeAttribute, RequiredAttribute usw. Mithilfe der virtuellen Methode IsValid von ValidationAttribute wird ermittelt, ob das markierte Objekt den aktuellen Regeln entspricht. Wenn asp.net mvc eine Modellbindung durchführt, erhält es das markierte ValidationAttribute und ruft dann IsValid auf, um festzustellen, ob die aktuellen Parameter den Regeln entsprechen. Wenn die Überprüfung fehlschlägt, werden auch Fehlerinformationen erfasst Verwenden Sie ModelState.IsValid, um zu bestimmen, ob die Modellüberprüfung bestanden wurde, und verwenden Sie ModelState, um den Grund für den Überprüfungsfehler zu ermitteln. Zum Beispiel das obige Beispiel:

public class RegisterInfo
 
{
 
  [Required(ErrorMessage="用户名不能为空")]
 
  public string UserName{get;set;}
 
 [Required(ErrorMessage="密码不能为空")]
 
  public string Password { get; set; }
 
}

Tatsächlich kann dieser Prozess auch auf Webform implementiert werden, indem man sich auf das Implementierungsprinzip von mvc bezieht. Der Vorteil dieser Methode besteht darin, dass sie sehr elegant und flexibel zu implementieren ist. Wenn mehrere Aktionen einen Modellparameter teilen, reicht es aus, ihn an einer Stelle zu schreiben. Der Schlüssel liegt darin, dass unser Code dadurch sehr prägnant aussieht.

Diese Methode weist jedoch auch Nachteile auf. Normalerweise verfügen unsere Projekte über viele Schnittstellen, z. B. über Dutzende von Schnittstellen. Es ist etwas luxuriös, für jede Schnittstelle einen Klassenverpackungsparameter zu definieren Und die Benennung dieser Klasse bereitet auch große Kopfschmerzen.

3. DataAnnotation kann auch auf Parametern markiert werden

Anhand der AttributeUsage der Verifizierungsfunktion können Sie erkennen, dass es nicht nur auf Attributen und Feldern, sondern auch auf Parametern markiert werden kann. Mit anderen Worten, wir können auch so schreiben:

public ActionResult Register([Required(ErrorMessage="用户名不能为空")]string userName, [Required(ErrorMessage="密码不能为空")]string password)

So zu schreiben ist auch in Ordnung, aber das Schreiben von Methodenparametern wie diesem wird es natürlich schaffen Hässlich, insbesondere wenn mehrere Parameter vorhanden sind oder Parameter mehrere Validierungsregeln haben.

4. Benutzerdefiniertes ValidateAttribute

Wir wissen, dass wir Filter verwenden können, um einige Verarbeitungen vor der Ausführung der MVC-Aktion durchzuführen, z. B. die Identitätsüberprüfung und die Autorisierungsverarbeitung. Ebenso kann es auch zur Überprüfung von Parametern eingesetzt werden. FilterAttribute ist ein allgemeiner Filter, der es uns ermöglicht, einige Vorgänge vor und nach der Ausführung der Aktion durchzuführen. Hier müssen wir die Parameter überprüfen, bevor die Aktion fehlschlägt.

Definieren Sie eine BaseValidateAttribute-Basisklasse wie folgt:

public class BaseValidateAttribute : FilterAttribute
 
{
 
  protected virtual void HandleError(ActionExecutingContext context)
 
  {
 
    for (int i = ValidateHandlerProviders.Handlers.Count; i > 0; i--)
 
    {
 
      ValidateHandlerProviders.Handlers[i - 1].Handle(context);
 
      if (context.Result != null)
 
      {
 
        break;
 
      }
 
    }
 
  }
 
}

Zur Verarbeitung von Ergebnissen kann sie extern registriert werden. IValidateHandler ist wie folgt definiert:

public interface IValidateHandler
 
{
 
  void Handle(ActionExecutingContext context);
 
}

ValidateHandlerProviders ist wie folgt definiert, es verfügt über einen Standardhandler.

public class ValidateHandlerProviders
 
{
 
  public static List<IValidateHandler> Handlers { get; private set; }
 
  
 
  static ValidateHandlerProviders()
 
  {
 
    Handlers = new List<IValidateHandler>()
 
    {
 
      new DefaultValidateHandler()
 
    };
 
  }
 
  
 
  public static void Register(IValidateHandler handler)
 
  {
 
    Handlers.Add(handler);
 
  }
 
}  

Der Zweck davon besteht darin, dass wir dieses Modul trennen und den endgültigen Verarbeitungsprozess trennen können, da wir möglicherweise viele spezifische ValidateAttributes haben Überlassen Sie es extern Entscheidungen. Beispielsweise können wir einen Prozessor im Projekt definieren:

public class StanderValidateHandler : IValidateHandler
 
{
 
  public void Handle(ActionExecutingContext filterContext)
 
  {
 
    filterContext.Result = new StanderJsonResult()
 
    {
 
      Result = FastStatnderResult.Fail("参数验证失败", 555)
 
    };
 
  }
 
}

und ihn dann beim Start der Anwendung registrieren: ValidateHandlerProviders.Handlers.Add ( new StanderValidateHandler());

Zwei Beispiele:

ValidateNullttribute:

public class ValidateNullAttribute : BaseValidateAttribute, IActionFilter
 
{
 
  public bool ValidateEmpty { get; set; }
 
  
 
  public string Parameter { get; set; }
 
  
 
  public ValidateNullAttribute(string parameter, bool validateEmpty = false)
 
  {
 
    ValidateEmpty = validateEmpty;
 
    Parameter = parameter;
 
  }
 
  
 
  public void OnActionExecuting(ActionExecutingContext filterContext)
 
  {
 
    string[] validates = Parameter.Split(&#39;,&#39;);
 
    foreach (var p in validates)
 
    {
 
      string value = filterContext.HttpContext.Request[p];
 
      if(ValidateEmpty)
 
      {
 
        if (string.IsNullOrEmpty(value))
 
        {
 
          base.HandleError(filterContext);
 
        }
 
      }
 
      else
 
      {
 
        if (value == null)
 
        {
 
          base.HandleError(filterContext);
 
        }
 
      }
 
    }
 
  }
 
  
 
  public void OnActionExecuted(ActionExecutedContext filterContext)
 
  {
 
  
 
  }
 
}

ValidateRegexAttribute:

public class ValidateRegexAttribute : BaseValidateAttribute, IActionFilter
 
{
 
  private Regex _regex;
 
  
 
  public string Pattern { get; set; }
 
  
 
  public string Parameter { get; set; }
 
  
 
  public ValidateRegexAttribute(string parameter, string pattern)
 
  {
 
    _regex = new Regex(pattern);
 
    Parameter = parameter;
 
  }
 
  
 
  public void OnActionExecuting(ActionExecutingContext filterContext)
 
  {
 
    string[] validates = Parameter.Split(&#39;,&#39;);
 
    foreach (var p in validates)
 
    {
 
      string value = filterContext.HttpContext.Request[p];
 
      if (!_regex.IsMatch(value))
 
      {
 
        base.HandleError(filterContext);
 
      }
 
    }
 
  }
 
  public void OnActionExecuted(ActionExecutedContext filterContext)
 
  {
 
  }
 
}

Weitere Verifizierungen können auf die gleiche Weise umgesetzt werden.

Auf diese Weise wird unser obiger Text zu:

Wägen Sie die zu verwendende Auswahl ab. Hier können wir weitere nützliche Informationen wie Fehlerbeschreibungen usw. erweitern.

Zusammenfassung
[ValidateNull("userName,password")]
 
public ActionResult Register(string userName, string password)

Natürlich hat jede Methode ihre Nachteile. Diese Wahl hängt von der jeweiligen Situation ab. Wenn zu viele Parameter vorhanden sind, wird im Allgemeinen empfohlen, diese mit einem Objekt zu umschließen.

Weitere verwandte Artikel zu verschiedenen Methoden der ASP.NET MVC-Hintergrundparameterüberprüfung finden Sie auf der chinesischen PHP-Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
C# und .net: Verständnis der Beziehung zwischen den beidenC# und .net: Verständnis der Beziehung zwischen den beidenApr 17, 2025 am 12:07 AM

Die Beziehung zwischen C# und .NET ist untrennbar miteinander verbunden, aber nicht dasselbe. C# ist eine Programmiersprache, während .NET eine Entwicklungsplattform ist. C# wird verwendet, um Code zu schreiben, in .NETs Intermediate Language (IL) zu kompilieren und von der .NET -Laufzeit (CLR) ausgeführt zu werden.

Die anhaltende Relevanz von C# .NET: Ein Blick auf die aktuelle VerwendungDie anhaltende Relevanz von C# .NET: Ein Blick auf die aktuelle VerwendungApr 16, 2025 am 12:07 AM

C#.NET ist immer noch wichtig, da es leistungsstarke Tools und Bibliotheken bietet, die mehrere Anwendungsentwicklung unterstützen. 1) C# kombiniert .NET Framework, um die Entwicklung effizient und bequem zu machen. 2) Mechanismus zum Typensicherheit und Müllsammlung von C#erhöht die Vorteile. 3) .NET bietet eine plattformübergreifende laufende Umgebung und eine reichhaltige APIs, wodurch die Flexibilität der Entwicklung verbessert wird.

Vom Web zum Desktop: Die Vielseitigkeit von C# .NETVom Web zum Desktop: Die Vielseitigkeit von C# .NETApr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C# .net und die Zukunft: Anpassung an neue TechnologienC# .net und die Zukunft: Anpassung an neue TechnologienApr 14, 2025 am 12:06 AM

C# und .NET passen sich durch kontinuierliche Aktualisierungen und Optimierungen an die Bedürfnisse neuer Technologien an. 1) C# 9.0 und .NET5 Führen Sie den Datensatztyp und die Leistungsoptimierung ein. 2) .NETCORE verbessert die native und containerische Unterstützung von Cloud. 3) ASP.NetCore integriert sich in moderne Webtechnologien. 4) ML.NET unterstützt maschinelles Lernen und künstliche Intelligenz. 5) Asynchrone Programmierung und Best Practices verbessern die Leistung.

Ist C# .NET das Richtige für Sie? Bewertung seiner AnwendbarkeitIst C# .NET das Richtige für Sie? Bewertung seiner AnwendbarkeitApr 13, 2025 am 12:03 AM

C#.NetissoBableFoREenterPrise-Level Applications-WithemicrosoftCosystemDuetoitsStrongtyPing, Richlibrary, Androbustperformance.

C# Code in .NET: Erforschen des ProgrammiervorgangsC# Code in .NET: Erforschen des ProgrammiervorgangsApr 12, 2025 am 12:02 AM

Der Programmierungsprozess von C# in .NET enthält die folgenden Schritte: 1) Schreiben von C# Code, 2) Kompilieren in eine mittlere Sprache (IL) und 3), die durch die .NET -Laufzeit (CLR) ausführt. Die Vorteile von C# in .NET sind die moderne Syntax, das leistungsstarke Typsystem und die enge Integration in das .NET -Framework, das für verschiedene Entwicklungsszenarien geeignet ist, von Desktop -Anwendungen bis hin zu Webdiensten.

C# .NET: Erforschen von Kernkonzepten und ProgrammierfundamentaldatenC# .NET: Erforschen von Kernkonzepten und ProgrammierfundamentaldatenApr 10, 2025 am 09:32 AM

C# ist eine moderne, objektorientierte Programmiersprache, die von Microsoft und als Teil des .NET-Frameworks entwickelt wurde. 1.C# unterstützt die objektorientierte Programmierung (OOP), einschließlich Einkapselung, Vererbung und Polymorphismus. 2. Asynchrones Programmieren in C# wird über Async implementiert und wartet auf Schlüsselwörter, um die Reaktionsfähigkeit der Anwendungen zu verbessern. 3.. Verwenden Sie LINQ, um Datensammlungen präzise zu verarbeiten. 4. Häufige Fehler umfassen Null-Referenzausnahmen und Indexausnahmen außerhalb des Bereichs. Zu den Debugging -Fähigkeiten gehört die Verwendung eines Debuggers und Ausnahmeberechnung. 5. Leistungsoptimierung umfasst die Verwendung von StringBuilder und das Vermeiden von unnötigem Packung und Unboxing.

Testen von C# .NET-Anwendungen: Einheit, Integration und End-to-End-TestTesten von C# .NET-Anwendungen: Einheit, Integration und End-to-End-TestApr 09, 2025 am 12:04 AM

Die Teststrategien für C#.NET-Anwendungen umfassen Unit-Tests, Integrationstests und End-to-End-Tests. 1. Unit -Test stellt sicher, dass die Mindesteinheit des Codes unter Verwendung des Frameworks MStest, Nunit oder Xunit unabhängig funktioniert. 2. Integrierte Tests überprüfen die Funktionen mehrerer Einheiten kombinierter, häufig verwendeten simulierten Daten und externen Diensten. 3. End-to-End-Tests simuliert den vollständigen Betriebsprozess des Benutzers, und Selen wird normalerweise für automatisierte Tests verwendet.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion