string sourceRoute = null, sourceParam = null;
string bodyCode = GetBodyCode(actionContext.Request);
foreach (var p in actionContext.ActionDescriptor.GetParameters())
{
if (p.GetCustomAttributes<EpsIdAttribute>().Any())
{
string curValue = actionContext.ActionArguments[p.ParameterName] as string;
if (curValue == null)
continue;
var newVal = ProcessValue(curValue);
actionContext.ActionArguments[p.ParameterName] = newVal.Item1;
if (routeCode != null && newVal.Item2 != routeCode)
throw new LogicalBadRequestException($"conflicting provider codes in route params: src '{sourceRoute}' = '{routeCode}', got '{p.ParameterName}' = '{newVal.Item2}");
if (routeCode == null)
{
sourceRoute = p.ParameterName;
routeCode = newVal.Item2;
}
}
else if (p.ParameterType == typeof(LendingProviderCode) || Nullable.GetUnderlyingType(p.ParameterType) == typeof(LendingProviderCode))
{
var pvalue = actionContext.ActionArguments[p.ParameterName];
if (pvalue == null)
continue;
var curValue = ((int)(LendingProviderCode)pvalue).ToString();
if (paramCode != null && paramCode != curValue)
throw new LogicalBadRequestException($"conflicting provider codes in query params: src '{sourceParam}' = '{paramCode}', got '{p.ParameterName}' = '{curValue}");
if (paramCode == null)
{
sourceParam = p.ParameterName;
paramCode = curValue;
}
}
}
if (routeCode == null && paramCode == null && bodyCode == null)
throw new LogicalBadRequestException("no provider code in route or param");