WebAPI 2中的DefaultInlineConstraintResolver错误

我正在使用Web API 2,当我在本地盒子上使用IIS 7.5发送POST到我的API方法时,出现以下错误。

The inline constraint resolver of type 'DefaultInlineConstraintResolver' was unable to resolve the following inline constraint: 'string'. Line 21: GlobalConfiguration.Configuration.EnsureInitialized(); 

我的API都不能使用IIS。 不过,我可以使用IIS Express在Visual Studio中运行我的API项目,并成功地向我的loginAPI发出POST,但是当我尝试向另一个API调用发出GET请求时,我收到约束parsing器错误。

为了解决这个问题,我在Visual Studio中创build了一个全新的Web API 2项目,并开始将现有的API导入到新的项目中,并运行它们以确保它们正常工作。 使用这个新项目的IIS Express,我得到了和我现有的API项目一样的结果。

我在这里错过了什么? 即使有一个全新的项目,我不能进行GET请求,而不会遇到这个约束parsing器问题。

这个错误意味着在一个路由的某个地方,你指定了类似的东西

 [Route("SomeRoute/{someparameter:string}")] 

不需要“string”,因为它是假定的types。

如错误所示,Web API附带的DefaultInlineConstraintResolver没有一个名为string的内联约束。 默认支持的如下所示:

 // Type-specific constraints { "bool", typeof(BoolRouteConstraint) }, { "datetime", typeof(DateTimeRouteConstraint) }, { "decimal", typeof(DecimalRouteConstraint) }, { "double", typeof(DoubleRouteConstraint) }, { "float", typeof(FloatRouteConstraint) }, { "guid", typeof(GuidRouteConstraint) }, { "int", typeof(IntRouteConstraint) }, { "long", typeof(LongRouteConstraint) }, // Length constraints { "minlength", typeof(MinLengthRouteConstraint) }, { "maxlength", typeof(MaxLengthRouteConstraint) }, { "length", typeof(LengthRouteConstraint) }, // Min/Max value constraints { "min", typeof(MinRouteConstraint) }, { "max", typeof(MaxRouteConstraint) }, { "range", typeof(RangeRouteConstraint) }, // Regex-based constraints { "alpha", typeof(AlphaRouteConstraint) }, { "regex", typeof(RegexRouteConstraint) } 

还有一件事,如果你不能使用int,bool或者任何其他的约束,那么它是关键敏感的,你需要删除任何空格。

 //this will work [Route("goodExample/{number:int}")] [Route("goodExampleBool/{isQuestion:bool}")] //this won't work [Route("badExample/{number : int}")] [Route("badExampleBool/{isQuestion : bool}")] 

当我在路由中的variables名称和variablestypes之间留有一个空格时,我也遇到了这个错误:

 [HttpGet] [Route("{id: int}", Name = "GetStuff")] 

它应该是以下内容:

 [HttpGet] [Route("{id:int}", Name = "GetStuff")]