C# 尚未找到另一个ASP.Net WebAPI路由

C# 尚未找到另一个ASP.Net WebAPI路由,c#,.net,asp.net-mvc,asp.net-web-api,breeze,C#,.net,Asp.net Mvc,Asp.net Web Api,Breeze,首先,我已经阅读了尽可能多的关于这个主题的文章,并安装了几个“路由调试”插件。我更熟悉Java/Spring,所以我真的不知道如何使用VS2012调试这个东西。(我无论如何都无法让IISExpress打印任何调试,更不用说我习惯于使用Spring/Tomcat的调试输出了。) 现在,我可以通过默认控制器点击索引页面。但是,我试图基于以下控制器点击URL/WebApi/Metadata/: [BreezeController] public class WebApiController : Api

首先,我已经阅读了尽可能多的关于这个主题的文章,并安装了几个“路由调试”插件。我更熟悉Java/Spring,所以我真的不知道如何使用VS2012调试这个东西。(我无论如何都无法让IISExpress打印任何调试,更不用说我习惯于使用Spring/Tomcat的调试输出了。)

现在,我可以通过默认控制器点击索引页面。但是,我试图基于以下控制器点击URL/WebApi/Metadata/:

[BreezeController]
public class WebApiController : ApiController {
  private readonly EFContextProvider<BankruptcyDbContext> _contextProvider =
    new EFContextProvider<BankruptcyDbContext>();

  [HttpGet]
  public string Metadata() {
    return _contextProvider.Metadata();
  }
}

对于基于ApiController的路由,您需要使用
MapHttpRoute
扩展来注册路由。例如:

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

顺便说一句,什么是BreezeController,为什么它会装饰在WebApiController上

确保您使用的是Visual Studio 2012的最新版本以及更新2等。。 你不仅应该在App_Start中有一个RouteConfig.cs文件,而且还有一个WebApiConfig.cs文件

因此,当普通MVC路由使用RouteConfig类时

public class RouteConfig
{
    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 }
        );
    }
}
Web API使用的是WebApiConfig,在静态类WebApiConfig中使用了上面建议的开箱即用代码:

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

太棒了,成功了!我不知道mapRoute和MapHttpRoute之间有什么不同。@BrockNoland欢迎来到ASP.NET Web API和ASP.NET MVC的混乱世界。两个完全不同的框架,打包在一起,看起来非常相似,“以简化学习过程”。@Kiran-属性
[BreezeController]
配置格式化程序并补充Breeze客户端的OData IQueryable处理。
public class RouteConfig
{
    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 }
        );
    }
}
public static void Register(HttpConfiguration config)
{
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}