简单的MVC RoutePrefix - HTTP错误404.0 - 未找到

时间:2014-11-02 06:46:57

标签: asp.net-mvc asp.net-web-api routes prefix asp.net-apicontroller

我已编码API controller,我希望在此控制器中添加RoutePrefix

我的控制器名称为MapCompanyController,此控制器有一个名为GetMapCompany的方法。

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

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

这就是我所做的:

  1. 我已将[RoutePrefix("1_0")]添加到MapCompanyController
  2. 我已将routes.MapMvcAttributeRoutes();添加到 RegisterRoutes RouteConfig
  3. 执行此操作后,我仍然可以使用/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功能,以下网址是正确的:

      

    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

1 个答案:

答案 0 :(得分: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:)