work towards path parameters
This commit is contained in:
1 parent
2e4570a560
commit
a24543063b
3 files changed
+44
-11
No files matched your search
@@ -107,27 +107,39 @@ public sealed class HttpServer {
|
||||
Assert(mi.IsPublic, $"Method tagged with HttpEndpointAttribute must be public! ({GetFancyMethodName()})");
|
||||
|
||||
var methodParams = mi.GetParameters();
|
||||
// check the mandatory prefix parameters
|
||||
Assert(methodParams.Length >= expectedEndpointParameterTypes.Length);
|
||||
for (int i = 0; i < expectedEndpointParameterTypes.Length; i++) {
|
||||
Assert(methodParams[i].ParameterType.IsAssignableFrom(expectedEndpointParameterTypes[i]),
|
||||
$"Parameter at index {i} of {GetFancyMethodName()} is of a type that cannot contain the expected type {expectedEndpointParameterTypes[i].FullName}.");
|
||||
}
|
||||
|
||||
// check return type
|
||||
Assert(mi.ReturnType == typeof(Task), $"Return type of {GetFancyMethodName()} is not {typeof(Task)}!");
|
||||
|
||||
|
||||
// check the rest of the method parameters
|
||||
var qparams = new List<QueryParameterInfo>();
|
||||
for (int i = expectedEndpointParameterTypes.Length; i < methodParams.Length; i++) {
|
||||
var par = methodParams[i];
|
||||
var attr = par.GetCustomAttribute<ParameterAttribute>(false);
|
||||
qparams.Add(new(
|
||||
attr?.Name ?? par.Name ?? throw new ArgumentException($"C# variable name of parameter at index {i} of method {GetFancyMethodName()} is null!"),
|
||||
par.ParameterType,
|
||||
attr?.IsOptional ?? false)
|
||||
);
|
||||
var pathAttr = par.GetCustomAttribute<PathParameterAttribute>(false);
|
||||
|
||||
if (!stringToTypeParameterConverters.ContainsKey(par.ParameterType)) {
|
||||
throw new MissingParameterConverterException($"Parameter converter for type {par.ParameterType} has not been registered (yet)!");
|
||||
if (attr != null && pathAttr != null) {
|
||||
throw new ArgumentException($"A method argument cannot be tagged with both {nameof(ParameterAttribute)} and {nameof(PathParameterAttribute)}");
|
||||
}
|
||||
|
||||
if (pathAttr != null) { // parameter is a path param
|
||||
|
||||
} else { // parameter is a normal one
|
||||
qparams.Add(new(
|
||||
attr?.Name ?? par.Name ?? throw new ArgumentException($"C# variable name of parameter at index {i} of method {GetFancyMethodName()} is null!"),
|
||||
par.ParameterType,
|
||||
attr?.IsOptional ?? false)
|
||||
);
|
||||
|
||||
if (!stringToTypeParameterConverters.ContainsKey(par.ParameterType)) {
|
||||
throw new MissingParameterConverterException($"Parameter converter for type {par.ParameterType} has not been registered (yet)!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user