У меня есть 2 варианта для вас.
Одним из вариантов будет использование регулярных выражений.[HttpGet("Info/{guids:regex((([{(]?[0-9A-F]{8}[-]?(?:[0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?)[\,]?)+)}")]
но это совсем не красиво и сложно для чтения (мое регулярное выражение также нуждается в пересмотре, сделанном просто для того, чтобы подчеркнуть его).
Более понятный способ - реализовать пользовательское ограничение.
public class GuidListConstraint : IRouteConstraint
{
/// <inheritdoc />
public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values,
RouteDirection routeDirection)
{
var valueActuallySubmitted = values.TryGetValue(routeKey, out var value);
if (!valueActuallySubmitted) return false;
var guidListAsString = value.ToString();
var splitOnComma = guidListAsString.Split(",", StringSplitOptions.RemoveEmptyEntries);
foreach (var guidValue in splitOnComma)
{
var isProperGuid = Guid.TryParse(guidValue, out var _);
if (!isProperGuid) return false;
}
return true;
}
}
Который вы можете зарегистрировать после services.AddMvc()
как
services.Configure<RouteOptions>(options => options.ConstraintMap.Add("myguidlist", typeof(GuidListConstraint)));
Затем вы можете украсить свои действия как [HttpGet("Info/{guids:myguidlist}")]
Не проверял это тщательно, нос небольшой настройкой это даст вам хороший старт.