Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/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
Routing .net Web Api路由不受尊重_Routing_Asp.net Web Api2 - Fatal编程技术网

Routing .net Web Api路由不受尊重

Routing .net Web Api路由不受尊重,routing,asp.net-web-api2,Routing,Asp.net Web Api2,我继承了一个web api项目。它是v2.1,但现在已升级到v2.2 但是,当我尝试将属性路由添加到控制器时,它是不受尊重的 我创建了一个新的API控制器,如下所示 public class MyController : ApiController { [Route("test")] public int TestInt() { return 42; } } 我的路线是这样的 config.Routes.MapHttpRoute(

我继承了一个web api项目。它是v2.1,但现在已升级到v2.2

但是,当我尝试将属性路由添加到控制器时,它是不受尊重的

我创建了一个新的API控制器,如下所示

public class MyController : ApiController
{
    [Route("test")]
    public int TestInt()
    {
        return 42;
    }
}
我的路线是这样的

config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "{controller}/{id}",
        defaults: new { action = RouteParameter.Optional, id = RouteParameter.Optional }
);
然而,当我点击/test url时,我得到了这个

<Error>
<Message>
No HTTP resource was found that matches the request URI 'https://localhost:446/test'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'test'.
</MessageDetail>
</Error>

未找到与请求URI名称匹配的HTTP资源https://localhost:446/test'.
未找到与名为“test”的控制器匹配的类型。
尝试了各种路线组合,但似乎没有任何效果

我在另一个项目中尝试了完全相同的方法,效果很好

因此,我认为在这个项目中有某种东西阻止了路由的工作


有什么想法吗?

我认为您应该在控制器上添加RoutePrefix属性:

[RoutePrefix("test")]
public class MyController : ApiController
{
    [Route("")]
    public int TestInt()
    {
        return 42;
    }
}
此外,您还应在WebApiConfig中添加下一行:

config.Routes.MapHttpAttributeRoutes();

我希望这会有所帮助。

谢谢-我错过了webapiconfig设置,我还需要一个[HttpGet]来执行操作-没有它似乎无法工作路由前缀不是必需的,顺便说一句。但无论如何,这是个好主意