1

我已经编写了一个API controller,我希望将一个添加RoutePrefix到这个控制器中。

我的控制器名称是MapCompanyController,这个控制器有一个方法叫做GetMapCompany.

目前,我可以通过调用以下网址访问此方法:/api/MapCompany/GetMapCompany

我希望添加一个RoutePrefix以便此方法的路径是:/api/1_0/MapCompany/GetMapCompany

这就是我所做的:

  1. 我已添加[RoutePrefix("1_0")]MapCompanyController
  2. 我已添加routes.MapMvcAttributeRoutes();RegisterRoutes RouteConfig

这样做之后,我仍然可以使用/api/MapCompany/GetMapCompany地址访问方法,并且/api/1_0/MapCompany/GetMapCompany执行以下错误:

HTTP Error 404.0 - Not Found

我可以对这段代码有一些帮助吗?

提前致谢

编辑

我创建了一个简单的控制器,如下所示:

public class TestRouteController : ApiController
{
    // GET: api/TestRoute/5
    public string Get(int id)
    {
        return "value";
    }
}

要访问该Get功能,以下 url 是正确的:

api/TestRoute/5

如果我将代码更改为如下:

public class TestRouteController : ApiController
{
    // GET: api/TestRoute/5
    [Route("routetest")]
    public string Get(int id)
    {
        return "value";
    }
}

函数的路径是什么Get

我尝试了以下方法:

  1. /api/TestRoute/5
  2. /api/routetest/5
  3. /routetest/api/TestRoute/5
  4. /api/TestRoute/routetest/5
4

1 回答 1

2

如果这真的是 ApiController 这应该注册 WebApiConfig 而不是 RouteConfig :

{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();
        }
    }
}

然后在你的 global.asax 中:

GlobalConfiguration.Configure(WebApiConfig.Register);

MVC 和 WebApi 中的路由是不同的

编辑:在 webapi 中为您的控制器和方法定义路由很简单,您只需向控制器类添加一个 RoutePrefix 属性,然后您可以向您的方法添加或不添加 Route 属性:

[RoutePrefix("api/TestRoute")]
public class TestRouteController : ApiController
{
    [Route("testroute")]
    [HttpGet()]
    public string Get(int id)
    {
        return "value";
    }
}

这样路由应该是 api/TestRoute/testroute?id=whatever

RouteConfig 用于 mvc “Controller”,对于 webApi “ApiController”,只需像上面一样注册路由并用属性定义它们,不需要模糊 RouteConfig :)

于 2014-11-03T16:11:19.817 回答