2013-05-07 72 views
1

我在我的Web API项目中使用了AttributeRouting。我已经安装了Web API的AttributeRouting。我想定义枚举路由约束,所以我安装我的AttributeRoutingHttpConfig配置如下:Http.EnumRouteContraint必须实现System.Web.Routing.IRouteConstraint

using System.Reflection; 
using System.Web.Http; 
using AttributeRouting.Web.Http.Constraints; 
using AttributeRouting.Web.Http.WebHost; 
using MyProject.Data.Models; 

[assembly: WebActivator.PreApplicationStartMethod(typeof(PhantasyTour.AttributeRoutingHttpConfig), "Start")] 

namespace MyProject 
{ 
    public static class AttributeRoutingHttpConfig 
    { 
     public static void RegisterRoutes(HttpRouteCollection routes) 
     {  
      routes.MapHttpAttributeRoutes(
       config => 
       { 
        config.AddRoutesFromAssembly(Assembly.GetExecutingAssembly()); 
        config.InlineRouteConstraints.Add("ListType", typeof(EnumRouteConstraint<ListType>)); 
       }); 
     } 

     public static void Start() 
     { 
      RegisterRoutes(GlobalConfiguration.Configuration.Routes); 
     } 
    } 
} 

当我火了我的应用程序立即收到以下错误:

约束“AttributeRouting.Web.Http。 Constraints.EnumRouteConstraint`1 [[MyProject.Data.Models.ListType,MyProject.Data,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]“必须实现System.Web.Routing.IRouteConstraint

I'我们查看了AttributeRouting.Web.Http.Constraints.EnumRouteConstraint的源代码并确认它实现了IH ttpRouteConstraint,这大概是MVC命名空间中IRouteConstraint的WebAPI等价物。

有谁知道我在做什么错了,我怎么能得到这个工作?

UPDATE:

我试图创建一个完全空白的Web应用程序和只添加的WebAPI和AttributeRouting为的WebAPI引用。尽管绝对没有引用MVC程序集,但我仍然收到相同的错误消息。然而,我发现在AttributeRouting.Web.Constraints命名空间中找到了另一个EnumRouteConstraint,它完美地工作。由于它位于Core AttributeRouting程序集中,因此它看起来并不特定于MVC。我很想知道为什么有两个不同的EnumRouteConstraint类只有其中一个工作。但这是另一个问题。

+0

你能告诉我,如果你使用NuGet,你安装了哪个软件包(AttributeRouting或AttributeRouting.WebApi)?或者,如果您在本地构建了哪个AttribRouting dll,您是否在空白测试项目中引用了它? – 2013-05-09 08:05:46

+0

@JoannaTurban - 我通过NuGet安装了AttributeRouting.WebApi包。 – 2013-05-10 12:19:16

回答

0

有趣的是,您所得到的异常是指名称空间System.Web.Routing的MVC接口。

我会把它当作一个线索,看看你项目中的所有参考,配置中的任何地方,其中MVC RoutesHttp Routes可能已经混在一起。

如果可能,如果你有任何问题,尝试删除所有对MVC(或System.Web.Routing的开始)的引用,以及属性路由的MVC风格(如果它是一个单独的dll)。

+0

感谢您的建议@joanna。正如你可以看到我的更新,我已经设法解决这个问题,通过采取你的建议和剥离所有的MVC参考。这样做使我意识到了可以工作的次级EnumRouteConstraint。我不确定为什么有两个这样的课程,但它确实让我的生活困难了几个小时。谢谢。 – 2013-05-09 01:20:07

相关问题