我在我的 Web API 项目中使用 AttributeRouting。我已经为 Web API 安装了 AttributeRouting。我想定义一个枚举路由约束,所以我设置了我的 AttributeRoutingHttpConfig 配置,如下所示:
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。路由.IRouteConstraint
我查看了 AttributeRouting.Web.Http.Constraints.EnumRouteConstraint 的源代码,并确认它实现了 IHttpRouteConstraint,这大概是 MVC 命名空间中 IRouteConstraint 的 WebAPI 等效项。
有谁知道我做错了什么以及如何让它工作?
更新:
我试图创建一个完全空白的 Web 应用程序,并且只为 WebAPI 引用添加 WebAPI 和 AttributeRouting。尽管绝对没有对 MVC 程序集的引用,但我仍然收到相同的错误消息。然而,我确实发现在 AttributeRouting.Web.Constraints 命名空间中找到了另一个 EnumRouteConstraint,它工作得很好。它似乎不是 MVC 特定的,因为它位于 Core AttributeRouting 程序集中。我很想知道为什么只有一个有效的 EnumRouteConstraint 类有两个不同的类。但这是另一个问题。