另一个ASP.Net WebAPI路由未找到
本文关键字:路由 WebAPI ASP Net 另一个 | 更新日期: 2023-09-27 18:16:23
首先,我已经阅读了尽可能多的关于这个主题的文章,并安装了几个"路由调试"插件。我更熟悉Java/Spring,所以我真的不知道如何使用vs 2012来调试这件事。(无论如何,我都无法让IISExpress打印任何调试,更不用说我使用Spring/Tomcat时习惯的那种调试输出了。(
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 = "Legal",
action = "Index",
id = UrlParameter.Optional }
);
}
}
现在,我可以通过默认控制器访问索引页面了。然而,我正在尝试基于以下控制器访问URL/WebApi/Metadata/:
[BreezeController]
public class WebApiController : ApiController {
private readonly EFContextProvider<BankruptcyDbContext> _contextProvider =
new EFContextProvider<BankruptcyDbContext>();
[HttpGet]
public string Metadata() {
return _contextProvider.Metadata();
}
}
"路由调试器"说我对/WebApi/Metadata、/WebApi/Metadata/、/WebApi/Metadata/0等的请求应该"匹配",但我得到的只有404。
第1版:我终于找到了跟踪日志,得到了更多的细节:
The controller for path &#39;/WebApi/Metadata&#39; was not found or does not implement IController
请确保您使用的是带有更新2等的Visual Studio 2012的最新版本。。您不仅应该在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,这是用上面在静态类WebApiCConfig:中建议的开箱即用的代码来实现的
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
对于基于ApiController的路由,您需要使用MapHttpRoute
扩展来注册路由。示例:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
顺便说一句,什么是BreezeController?为什么它会在WebApiController上装饰?