Files
BeWoPlaner/Service/ServiceUtils/ServiceHelper.cs
Christian bc48047b3e - Rechnungsformular Prof. Eggers Stiftung
- Klientennamen im Jahresbericht eingebaut
- Bugfix Reports für fehlende Unterschriften
- Bugfix History
2025-03-19 00:58:48 +01:00

83 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.IdentityModel.Claims;
using System.Linq;
using System.Reflection;
using System.ServiceModel.Channels;
using System.Text;
using System.Threading.Tasks;
using BeWo.Service.ServiceContracts;
using BS.Shared.Attributes;
using BS.Shared.Extensions;
using NHibernate.Hql.Ast.ANTLR.Tree;
namespace BeWo.Service.ServiceUtils
{
public static class ServiceHelper
{
public static T GetCustomAttribute<T>(Uri baseAddress, Uri request) where T : Attribute
{
// Hole Interface
string lInterface = null;
var segments = baseAddress.Segments;
for (int i = 0; i < segments.Length; i++)
{
var seg = segments[i].Trim('/');
if (seg.EndsWith(".svc"))
{
lInterface = seg.Substring(0, seg.Length - 4);
}
}
// Falls kein Interface gefunden wird
if (string.IsNullOrWhiteSpace(lInterface) )
{
throw new ArgumentException($"Zugriff verweigert. Interface unbekannt");
}
// Wird für URLTemplate != Methodname verwendet
var name = $"BeWo.Service.ServiceContracts.I{lInterface}";
var t = Type.GetType(name);
var resolver = new UriTemplateResolver(baseAddress, t);
var method = resolver.ResolveMethod(request.AbsoluteUri);
var methodInfo = t.GetMethod(method);
// Rückgabe
return getCustomAttribute<T>(methodInfo);
}
public static T GetCustomAttribute<T>(string pServiceInterface, string pMethodName) where T : Attribute
{
MethodInfo methodInfo = null;
try
{
// Hole entsprechende Methode
var name = $"BeWo.Service.ServiceContracts.{pServiceInterface}";
var t = Type.GetType(name);
methodInfo = t?.GetMethod(pMethodName);
}
catch (Exception)
{
throw new ArgumentException($"Zugriff verweigert. Interface oder Methode unbekannt");
}
return getCustomAttribute<T>(methodInfo);
}
private static T getCustomAttribute<T>(MethodInfo methodInfo) where T : Attribute
{
if (methodInfo == null)
{
throw new ArgumentException($"Zugriff verweigert. Interface oder Methode unbekannt");
}
// Hole Custome Attribute
var attribute = methodInfo.GetCustomAttribute<T>();
return attribute;
}
}
}