WebApi中的内联约束错误
本文关键字:约束 错误 WebApi | 更新日期: 2023-09-27 18:20:31
我的webapi中有自定义路由。当我调用它时,我得到以下错误
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)
位于System.Web.Http.Routing.DefaultDirectRouteProvider.GetDirectRoutes(HttpControllerDescriptor controllerDescriptor,IReadOnlyList 1 actionDescriptors, IInlineConstraintResolver constraintResolver)
位于System.Web.Http.Routing.AttributeRoutingMapper.AddRouteEntries(SubRouteCollection收集器、HttpConfiguration配置、IInlineConstraintResolver、IDirectRouteProvider directRouteProvider)位于System.Web.Http.Routing.AttributeRoutingMapper。<>c_DisplayClass2.<>c__DisplayClass4.b_1()
at 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 configurationCallback)
位于c:''Users''VinoBarathi''Documents''Visual Studio 2013''Projects''MoviesAPI''MoviesAPI''Global.asax.cs:line 14`中的MoviesAPI.WebApiApplication.Application_Start()
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;
}`
帮我克服这个。
您需要实现名为MovieData
的内联约束,该约束继承自IHttpRouteConstraint
。它在您的路由中声明:[route("~/api/Values/GetMovieByCategory/{movieData:movieData}")]
10在WebApiConfig文件中注册:
var constraintResolver = new DefaultInlineConstraintResolver();
constraintResolver.ConstraintMap.Add("MovieData", typeof(MovieDataRouteConstraint));
config.MapHttpAttributeRoutes(constraintResolver);