1

我在我的 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 类有两个不同的类。但这是另一个问题。

4

1 回答 1

0

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

我会以此为线索,查看项目中的所有引用,以及配置中可能混淆的任何MVC Routes地方Http Routes

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

于 2013-05-08T20:53:50.617 回答