我在我的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类只有其中一个工作。但这是另一个问题。
你能告诉我,如果你使用NuGet,你安装了哪个软件包(AttributeRouting或AttributeRouting.WebApi)?或者,如果您在本地构建了哪个AttribRouting dll,您是否在空白测试项目中引用了它? – 2013-05-09 08:05:46
@JoannaTurban - 我通过NuGet安装了AttributeRouting.WebApi包。 – 2013-05-10 12:19:16