Feedback

C# - Eingabevalidierung mit PostSharp Aspekt und Regex

Veröffentlicht von am 13.05.2008
(1 Bewertungen)
Ein OnMethodBoundaryAspect Aspekt aus PostSharp Laos um ein eine Eigenschaft mit einer Regular Expression zu validieren.

Dem Property das geprüft werden soll, wird der Aspekt RegexValidatorAspekt vorangestellt.

Zusätzlich muss noch PostSharp.Laos und PostSharp.Public referenziert werden.
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Aufbau

Nach dieser Schulung können Sie mittels objektorientierter Modelle in VB.NET 2017/2015/2013 wiederverwendbare Elemente eigenständig erstellen.

Angular mit ASP.NET Core für .NET-Entwickler

.NET ist Ihnen vertraut, als Entwickler verfügen Sie über einschlägige Kenntnisse. In diesem Kurs lernen Sie nun, Angular in .NET-Umgebungen einzusetzen. Sie verstehen das Konzept von Angular und integrieren das clientseitige JS-Framework sicher in.NET-Anwendungen.

using System;
using System.Collections.Generic;
using System.Text;
using PostSharp.Laos;
using System.Text.RegularExpressions;

namespace PostSharpTest
{
	/// <summary>
	/// Überprüft die Eingabe einer Eigenschaft mit einem Regulären Ausdruck.
	/// </summary>
	/// <remarks>Mit dem Named Property <see cref="math"/> kann eingestellt werden ob eine Exception
	/// geworfen wernden soll, wenn keine Übereinstimmung vorliegt (match=false) oder die Ausführung
	/// des Codes normal weitergeht (match=true)</remarks>
	/// <example>
	/// using System;
	/// using System.Collections.Generic;
	/// using System.Text;
	/// 
	/// namespace PostSharpTest
	/// {
	///		class Program
	///		{
	///			static void Main(string[] args)
	///			{
	///				try
	///				{
	///					MyInputClass myClass = new MyInputClass();
	///					myClass.ValidatedProp = "20";	//gültige Eingabe
	///					myClass.ValidatedProp = "e20"; //ungültige Eingabe - InvalidInputException
	///					myClass.ValidatedProp = "20.0"; //ungültige Eingabe - InvalidInputException
	///				}
	///				catch (System.ArgumentException e)
	///				{
	///					Console.WriteLine(e.Message);
	///				}
	///			}
	///		}
	///	
	///		class MyInputClass
	///		{
	///			private string myField;
	/// 
	///			[RegexValidatorAspekt("[^0-9]", match = true)]
	///			public string ValidatedProp
	///			{
	///				get { return myField; }
	///				set { myField = value; }
	///			}
	///		}
	/// }
	/// </example>
	/// <author>Rainer Schuster</author>
	[Serializable]
	[AttributeUsage(AttributeTargets.Property)]
	public class RegexValidatorAspekt: OnMethodBoundaryAspect
	{		
		private Regex pattern;
		public bool match = true;

		public RegexValidatorAspekt(string excludingRegEx)
		{
			pattern = new Regex(excludingRegEx, RegexOptions.Compiled);
			
		}

		public override void OnEntry(MethodExecutionEventArgs eventArgs)
		{
			object[] objArgs = eventArgs.GetArguments();
			
			//Entweder kam eine NullReference, 
			//oder wir sind im getter des Property
			if( objArgs != null)
			{	
				//... und da gibt es nur einen Parameter.
				string value = objArgs[0].ToString();
				if( pattern.IsMatch( value ) == match)
				{
					string message = string.Format("Invalid value:{0} for pattern {1}", value, pattern.ToString());
					throw new ArgumentException( message);
				}
			}
		}
	}
}

Abgelegt unter PostSharp, PostSharp Laos, Aspekt, AOP, Regex.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!