DefaultInlineConstraintResolver Error in WebAPI 2

后端 未结 6 1572
春和景丽
春和景丽 2020-12-23 13:10

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         


        
6条回答
  •  情话喂你
    2020-12-23 13:44

    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

提交回复
热议问题