C# WebApi中的内联约束错误

C# WebApi中的内联约束错误,c#,asp.net-web-api,asp.net-web-api2,C#,Asp.net Web Api,Asp.net Web Api2,我的webapi中有自定义路由。当我调用它时,我得到以下错误 类型为“DefaultInlineConstraintResolver”的内联约束解析程序无法解析以下内联约束:“MovieData”。 堆栈跟踪: at System.Web.Http.Routing.InlineRouteTemplateParser.GetInlineConstraint(组约束组、布尔等参变量、IInlineConstraintResolver) 位于System.Web.Http.Routing.Inline

我的webapi中有自定义路由。当我调用它时,我得到以下错误

类型为“DefaultInlineConstraintResolver”的内联约束解析程序无法解析以下内联约束:“MovieData”。

堆栈跟踪:
at System.Web.Http.Routing.InlineRouteTemplateParser.GetInlineConstraint(组约束组、布尔等参变量、IInlineConstraintResolver)
位于System.Web.Http.Routing.InlineRouteTemplateParser.ParseRouteTemplate(字符串routeTemplate,IDictionary
2默认值,IDictionary
2约束,IInlineConstraintResolver约束求解器)
位于System.Web.Http.Routing.DirectRouteFactoryContext.CreateBuilder(字符串模板,IInlineConstraintResolver)
位于System.Web.Http.Routing.DirectRouteFactoryContext.CreateBuilderInternal(字符串模板)
位于System.Web.Http.Routing.DirectRouteFactoryContext.CreateBuilder(字符串模板)
位于System.Web.Http.RouteAttribute.System.Web.Http.Routing.IDirectRouteFactory.CreateRoute(DirectRouteFactoryContext上下文)
在System.Web.Http.Routing.DefaultDirectRouteProvider.CreateRouteEntry(字符串前缀,IDirectRouteFactory工厂,IReadOnlyCollection
1操作,
IInlineConstraintResolver constraintResolver,布尔目标操作)
在System.Web.Http.Routing.DefaultDirectRouteProvider.CreateRouteEntries(字符串前缀,IReadOnlyCollection
1工厂,IReadOnlyCollection
1操作,IInlineConstraintResolver constraintResolver,Boolean targetIsAction)
在System.Web.Http.Routing.DefaultDirectRouteProvider.GetActionDirectRoutes(HttpActionDescriptor actionDescriptor,IReadOnlyList
1工厂,IInlineConstraintResolver constraintResolver)
在System.Web.Http.Routing.DefaultDirectRouteProvider.GetDirectRoutes(HttpControllerDescriptor controllerDescriptor,IReadOnlyList
1 actionDescriptors,IInlineConstraintResolver constraintResolver)
位于System.Web.Http.Routing.AttributeRoutingMapper.AddRouteEntries(SubcuteCollection收集器、HttpConfiguration配置、IInlineConstraintResolver constraintResolver、IDirectRouteProvider directRouteProvider) 在System.Web.Http.Routing.AttributeRoutingMapper.c_uuuDisplayClass2.c_uuuDisplayClass4.b_uuu1()

在System.Web.Http.Routing.RouteCollectionRoute.EnsureInitialized(Func
1初始值设定项) 在System.Web.Http.Routing.AttributeRoutingMapper.c__DisplayClass2.b__0(HttpConfiguration配置)中 在System.Web.Http.HttpConfiguration.EnsureInitialized()上 在System.Web.Http.GlobalConfiguration.Configure(操作
1配置回调)
在c:\Users\VinoBharathi\Documents\visualstudio 2013\Projects\MoviesAPI\MoviesAPI\Global.asax.cs中的MoviesAPI.WebApiApplication.Application_Start()处:第14行`

ApiController:
[HttpGet]
[路由(“~/api/Values/GetMovieByCategory/{movieData:movieData}”)]

公共IEnumerable GetMovieByCategory(MovieData MovieData)

{
IEnumerable movieDataByCat=null; 字符串[]参数转换; 如果(movieData.Cast.Count()!=0)

paramCast=movieData.Cast;
IEnumerable GetAllMovies=null;
GetAllMovies=repo.GetAll();

        if (movieData.Cast == null || movieData.Cast.Count() == 0)
        {
            movieDataByCat = from data in GetAllMovies
                             where (data.Classification == (movieData.Classification == null ? string.Empty : movieData.Classification) ||
                                    data.Genre == (movieData.Genre == null ? string.Empty : movieData.Genre) ||
                                    data.Rating == movieData.Rating ||
                                    data.ReleaseDate == movieData.ReleaseDate ||
                                    data.Title == (movieData.Title == null ? string.Empty : movieData.Title))

                             select data;
        }
        return movieDataByCat;
    }`

帮助我克服这个问题。

您需要实现名为
MovieData
taht的内联约束继承自
IHttpRouteConstraint
。 它在路由中声明:[route(“~/api/Values/GetMovieByCategory/{movieData:movieData}”)]

在WebApiConfig文件中注册它:

  var constraintResolver = new DefaultInlineConstraintResolver();
            constraintResolver.ConstraintMap.Add("MovieData", typeof(MovieDataRouteConstraint));
           config.MapHttpAttributeRoutes(constraintResolver);