为什么我的简单RoutePrefix无法使用Web API?

时间:2014-06-09 10:44:43

标签: asp.net asp.net-mvc asp.net-web-api

我有以下内容:

 [RoutePrefix("api/UserProfile/{id}")]
    public class UserProfileController : ApiController
    {
        private IdentityContext db = new IdentityContext();

        public async Task<IHttpActionResult> GetMapData()
        {

我通过以下调用来调用它,但它没有找到返回。

GET /api/UserProfile/GetMapData HTTP/1.1

HTTP/1.1 404 Not Found

我按照文档设置:

config.MapHttpAttributeRoutes();

有人能告诉我我做错了吗?

2 个答案:

答案 0 :(得分:1)

添加&#34;路由[&#34; GetMapData&#34;]&#34;在这种情况下操作的属性... RoutePrefix属性不会将任何路由添加到路由表,因此您会看到此行为...它仅用于为操作中存在的任何Route属性提供任何前缀。

答案 1 :(得分:0)

[RoutePrefix]为您的路线添加前缀

因此,在您的示例中,如果您未指定[RoutePrefix]属性,那么按照惯例,您的路线将是:

~/UserProfile/GetMapData

通过添加[RoutePrefix]属性,您说该控制器中的路由将以指定路由为前缀。

即。您正在有效地改变您的路线:

~/api/UserProfile/{id}/UserProfile/GetMapData
  ^^^^^^^^^^^^^^^^^^^^^

如果您只想添加“api”前缀,请将前缀更改为:

[RoutePrefix("api")]

查看有关属性路由here的详细信息。