У меня есть приложение ASP.NET WebAPI со следующим контроллером и маршруту:C# ASP.NET WebAPI шаблон маршрута не работает с Ури параметрами
WebApiConfig.cs
var constraintResolver = new DefaultInlineConstraintResolver();
constraintResolver.ConstraintMap.Add("validDate", typeof(DateConstraint));
Controller.cs
[HttpGet]
[Route("deleted/{from:validDate?}/{to:validDate?}", Name = "GetDeletedData")]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(IEnumerable<SimpleClass>), Description = "response")]
public async Task<HttpResponseMessage> Get(
[FromUri]string from = "",
[FromUri]string to = ""
)
{
}
Constraint
public class DateConstraint : IHttpRouteConstraint
{
public bool Match(
HttpRequestMessage request,
IHttpRoute route,
string parameterName,
IDictionary<string, object> values,
HttpRouteDirection routeDirection
)
{
object value;
if (!values.TryGetValue(parameterName, out value))
return false;
var attribute = new DateAttribute();
return attribute.IsValid(value);
}
}
Вышеуказанный маршрут ударил, хотя я передаю следующий URL-адрес, т.е. я не перехожу от и к параметрам, но контроллер попал и ничего не происходит.
http://localhost:65190/products/deleted?adfear=2016-07-01 03:30:05&adfaewr=2016-07-01 03:30:05
Как убедиться, что маршрут попал только при правильных параметрах или сбросе 404 не найдена ошибка?
Мое требование - поля могут быть необязательными. –
Если они оба являются необязательными, то вызовы по умолчанию '/ deleted' будут конфликтовать с этим действием. Это потому, что 'Get()' и 'Get (DateTime? From = null, DateTime? To = null)' считаются одинаковыми, и структура не будет знать, какой из них использовать – Nkosi
Как достичь моего требования, если поля являются необязательными? Есть ли лучший способ достичь этого? –