I\'m using Web API 2 and I\'m getting the following error when I send a POST to my API method using IIS 7.5 on my local box.
The inline constraint resolver o
I designed a API route for one Undo Web API method and I tried to apply ENUM datatype validation on action in route and encountered below DefaultInlineConstrainResolver Error
Error: System.InvalidOperationException: 'The inline constraint resolver of type 'DefaultInlineConstraintResolver' was unable to resolve the following inline constraint: 'ActionEnum’
[HttpGet]
[Route("api/orders/undo/{orderID}/action/{actiontype: OrderCorrectionActionEnum}")]
public IHttpActionResult Undo(int orderID, OrderCorrectionActionEnum actiontype)
{
_route(undo(orderID, action);
}
public enum OrderCorrectionActionEnum
{
[EnumMember]
Cleared,
[EnumMember]
Deleted,
}
To apply ENUM constrain, you have to create custom OrderCorrectionEnumRouteConstraint
by using IHttpRouteConstraint
.
public class OrderCorrectionEnumRouteConstraint : IHttpRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
// You can also try Enum.IsDefined, but docs say nothing as to
// is it case sensitive or not.
var response = Enum.GetNames(typeof(OrderCorrectionActionEnum)).Any(s = > s.ToLowerInvariant() == values[parameterName].ToString().ToLowerInvariant());
return response;
}
public bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName, IDictionary< string, object> values, HttpRouteDirection routeDirection)
{
bool response = Enum.GetNames(typeof(BlockCorrectionActionEnum)).Any(s = > s.ToLowerInvariant() == values[parameterName].ToString().ToLowerInvariant());
return response;
}
}
Reference (This is my blog): https://rajeevdotnet.blogspot.com/2018/08/web-api-systeminvalidoperationexception.html for more details