1

在我从 Web API 更新到之前5.0.0-beta25.0.0-rc1我可以做这样的事情:

[RoutePrefix("api/v1/test")]
public class TestController : ApiController
{
    [HttpGet]
    public TestString Get()
    {
        return new TestString { str = "HELLO WORLD" };
    }
}

因此,当我访问 URL/api/v1/test时,它会出现在该Get()功能上。

更新到 Web API 后,5.0.0-rc1我在去的时候得到 404/api/v1/test

但是,这有效:

[RoutePrefix("api/v1")]
public class TestController : ApiController
{
    [HttpGet("test")]
    public TestString Get()
    {
        return new TestString { str = "HELLO WORLD" };
    }
}

你能解释一下为什么这不再起作用了吗?

**编辑** [HttpGet("")]有效。然后它打破了那个Get()功能。

4

1 回答 1

2

我不确定,但我相信 Http[Get, Post, etc] 类型属性已删除其路由属性。此链接提示它:

http://blogs.microsoft.co.il/blogs/bnaya/archive/2013/08/28/asp-net-web-api-attribute-based-routing.aspx

请注意,当今 Web 上可用的大多数基于属性的路由示例都使用旧属性,如 [PUT] 或 [HttpPut],最新版本不再支持(当前可从 ASP.NET 夜间版本获得,http: //www.myget.org/F/aspnetwebstacknightly/ ),这些属性被替换为 [Route] 属性。

请参阅https://aspnetwebstack.codeplex.com/SourceControl/list/changesetshttps://aspnetwebstack.codeplex.com/workitem/1206。基本上,目标是将动词过滤器与属性路由分开。

于 2013-09-01T19:27:56.567 回答