Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api Http.EnumRouteConstraint必须实现System.Web.Routing.IRouteConstraint_Asp.net Web Api_Attributerouting - Fatal编程技术网

Asp.net web api Http.EnumRouteConstraint必须实现System.Web.Routing.IRouteConstraint

Asp.net web api Http.EnumRouteConstraint必须实现System.Web.Routing.IRouteConstraint,asp.net-web-api,attributerouting,Asp.net Web Api,Attributerouting,我正在Web API项目中使用AttributeRouting。我已经安装了Web API的AttributeRouting。我想定义一个枚举路由约束,因此我设置了AttributeRoutingTpConfig配置,如下所示: using System.Reflection; using System.Web.Http; using AttributeRouting.Web.Http.Constraints; using AttributeRouting.Web.Http.WebHost; u

我正在Web API项目中使用AttributeRouting。我已经安装了Web API的AttributeRouting。我想定义一个枚举路由约束,因此我设置了AttributeRoutingTpConfig配置,如下所示:

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);
        }
    }
}
使用系统反射;
使用System.Web.Http;
使用AttributeRouting.Web.Http.Constraints;
使用AttributeRouting.Web.Http.WebHost;
使用MyProject.Data.Models;
[程序集:WebActivator.PreApplicationStartMethod(typeof(PhantasyTour.attributeRoutingTpConfig),“开始”)]
名称空间MyProject
{
公共静态类AttributeRoutingTpConfig
{
公共静态无效注册表项(HttpRouteCollection路由)
{    
routes.MapHttpAttribute路由(
配置=>
{
config.AddRoutesFromAssembly(Assembly.getExecutionGassembly());
Add(“ListType”,typeof(EnumRouteConstraint));
});
}
公共静态void Start()
{
RegisterRoutes(全局配置.配置.路由);
}
}
}
当我启动应用程序时,我立即收到以下错误:

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

我已经查看了AttributeRouting.Web.Http.Constraints.EnumRouteConstraint的源代码,并确认它实现了IHTTProuteCtraint,这可能是MVC命名空间中与IRouteConstraint等效的WebAPI

有人知道我做错了什么,以及我怎样才能让它工作吗

更新:


我试图创建一个完全空白的Web应用程序,并仅为WebAPI引用添加WebAPI和AttributeRouting。尽管绝对没有对MVC程序集的引用,但我仍然收到相同的错误消息。然而,我确实发现在AttributeRouting.Web.Constraints命名空间中有另一个EnumRouteConstraint,它工作得非常好。它似乎不是特定于MVC的,因为它位于核心AttributeRouting程序集中。我很想知道为什么有两个不同的EnumRouteConstraint类,而其中只有一个可以工作。但这是另一个问题。

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

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


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

谢谢您的建议@joanna。正如您在我的更新中所看到的,我已经通过采纳您的建议并去掉所有MVC引用,成功地解决了这个问题。这样做让我意识到第二个EnumRouteConstraint有效。我不知道为什么会有这两门课,但这确实让我的生活艰难了几个小时。谢谢。如果您使用NuGet,您能告诉我您安装了哪个软件包(AttributeRouting或AttributeRouting.WebApi)吗?或者,如果您在本地构建了它,那么您在空白测试项目中引用了哪种AttribRouting DLL?@JoannaTurban-我通过NuGet安装了AttributeRouting.WebApi包。