为什么我的ASP.NET API路由没有被调用,我的URL不正确?

时间:2014-08-05 15:03:33

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

我有一个新的ASP.NET MVC 5应用程序。 我在我的controllers文件夹中添加了一个/ api文件夹,并添加了一个MVC2 API控制器。

我的global.asax有:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }

我的控制器如下:

public class UsersController : ApiController
{

    [HttpGet]
    [ActionName("User")] 
    public IToken GetUser()
    {
        return new User();
    }
}

现在,当我访问时,我找不到404资源错误:

http://localhost:53323/api/users/user
http://localhost:53323/api/users/getuser

问题是什么?

更新

我的MVC路线配置:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    } 

我的API路线配置:

        config.MapHttpAttributeRoutes();

        //config.Routes.MapHttpRoute(
        //    name: "DefaultApi",
        //    routeTemplate: "api/{controller}/{id}",
        //    defaults: new { id = RouteParameter.Optional }
        //);

        config.Routes.MapHttpRoute(
            name: "ActionApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

2 个答案:

答案 0 :(得分:1)

好像您错过了Application_Start()中的正确注册。

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    WebApiConfig.Register(GlobalConfiguration.Configuration); // This should be above the default route registration.

    RouteConfig.RegisterRoutes(RouteTable.Routes);
    //GlobalConfiguration.Configure(WebApiConfig.Register); // Remove this line.
}

答案 1 :(得分:0)

尝试在控制器和操作方法上使用attribute routing

示例

[RoutePrefix("api/users")]
public class UsersController : ApiController
{

    [HttpGet]
    [Route("user")]
    public IToken GetUser()
    {
        return new User();
    }
}