2015-11-04 57 views
0

我在我的webapi中定製了路由。當我調用它,我收到以下錯誤WebApi中的Inline Constraint錯誤

The inline constraint resolver of type 'DefaultInlineConstraintResolver' was unable to resolve the following inline constraint: 'MovieData'.

堆棧跟蹤: at System.Web.Http.Routing.InlineRouteTemplateParser.GetInlineConstraint(Group constraintGroup, Boolean isOptional, IInlineConstraintResolver constraintResolver) at System.Web.Http.Routing.InlineRouteTemplateParser.ParseRouteTemplate(String routeTemplate, IDictionary 2默認,IDictionary的2 constraints, IInlineConstraintResolver constraintResolver) at System.Web.Http.Routing.DirectRouteFactoryContext.CreateBuilder(String template, IInlineConstraintResolver constraintResolver) at System.Web.Http.Routing.DirectRouteFactoryContext.CreateBuilderInternal(String template) at System.Web.Http.Routing.DirectRouteFactoryContext.CreateBuilder(String template) at System.Web.Http.RouteAttribute.System.Web.Http.Routing.IDirectRouteFactory.CreateRoute(DirectRouteFactoryContext context) at System.Web.Http.Routing.DefaultDirectRouteProvider.CreateRouteEntry(String prefix, IDirectRouteFactory factory, IReadOnlyCollection 1分的動作,IInlineConstraintResolver constraintResolver, Boolean targetIsAction) at System.Web.Http.Routing.DefaultDirectRouteProvider.CreateRouteEntries(String prefix, IReadOnlyCollection 1工廠,IReadOnlyCollection 1 actions, IInlineConstraintResolver constraintResolver, Boolean targetIsAction) 在System.Web.Http.Routing。 DefaultDirectRouteProvider.GetActionDirectRoutes(HttpActionDescriptor actionDescriptor,IReadOnlyList 1 factories, IInlineConstraintResolver constraintResolver) at System.Web.Http.Routing.DefaultDirectRouteProvider.GetDirectRoutes(HttpControllerDescriptor controllerDescriptor,IReadOnlyList 1 actionDescriptors, IInlineConstraintResolver constraintResolver) at System.Web.Http.Routing.AttributeRoutingMapper.AddRouteEntries(SubRouteCollection collector,HttpConfiguration configuration,IInlineConstraintResolver constraintResolver,IDirectRouteProvider directRouteProvider) at System.Web.Http.Routing.AttributeRoutingMapper。 <> c__DisplayClass2。 <> c__DisplayClass4.b__1() at System.Web.Http.Routing.RouteCollectionRoute.EnsureInitialized(Func 1 initializer) at System.Web.Http.Routing.AttributeRoutingMapper。 <> c__DisplayClass2.b__0(HttpConfiguration配置) 在System.Web.Http.HttpConfiguration.EnsureInitialized() 在System.Web.Http.GlobalConfiguration.Configure(動作1 configurationCallback) 在MoviesAPI.WebApiApplication.Application_Start(c)中:\用戶\ VinoBharathi \文檔\的Visual Studio 2013 \項目\ MoviesAPI \ MoviesAPI \的Global.asax.cs:線14`

ApiController:
[HttpGet] [Route("~/api/Values/GetMovieByCategory/{movieData:MovieData}")]
public IEnumerable<MovieData> GetMovieByCategory(MovieData movieData)
{
IEnumerable<MovieData> movieDataByCat = null; string[] paramCast; if (movieData.Cast.Count() != 0)

paramCast = movieData.Cast;
IEnumerable<MovieData> 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; 
    }` 

幫我渡過這個。

回答

0

您需要實現名爲MovieData的內聯約束,它繼承自IHttpRouteConstraint。 它宣佈在你的路線:路線( 「〜/ API /價值/ GetMovieByCategory/{movieData:MovieData}」)]

十名WebApiConfig文件進行註冊:

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