找不到具有属性路由的子文件夹中的 Web API 控制器
Web API controller in subfolder not being found with attribute routing
我在这个文件夹结构中有一个控制器:
Site
-Controllers
--API
---EventsController.cs
EventsController.cs 包含这个:
[RoutePrefix("api")]
public class EventsController : Controller
{
[Route("event")]
public ActionResult Index()
{
return View("~/Views/Home/Index.cshtml");
}
WebApiConfig.cs 包含这个:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
当我 运行 来自 Visual Studio 的站点并尝试访问 http://127.0.0.1:8080/api/event 时,除了这个错误我什么也没看到:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://127.0.0.1:8080/api/event'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'event'.
</MessageDetail>
</Error>
如果我注释掉 config.Routes.MapHttpRoute 行以使 WebApiConfig.cs 如下所示,则上面的 URL 有效:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
//config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "api/{controller}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
}
我做错了什么?是什么导致配置DefaultApi路由时属性路由失败?我试过将它 before/after 放在 config.MapHttpAttributeRoutes();两者都不起作用。
顺便说一句,我在阅读以下文章时手动构建了这个项目,它与 MVC/Web API 项目具有相同的结构并且确实有效。我只是不知道我做了什么不同的事情。
感谢 @phil-cooper the 在 api 控制器中继承了正确的基础 class。
我在这个文件夹结构中有一个控制器:
Site
-Controllers
--API
---EventsController.cs
EventsController.cs 包含这个:
[RoutePrefix("api")]
public class EventsController : Controller
{
[Route("event")]
public ActionResult Index()
{
return View("~/Views/Home/Index.cshtml");
}
WebApiConfig.cs 包含这个:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
当我 运行 来自 Visual Studio 的站点并尝试访问 http://127.0.0.1:8080/api/event 时,除了这个错误我什么也没看到:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://127.0.0.1:8080/api/event'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'event'.
</MessageDetail>
</Error>
如果我注释掉 config.Routes.MapHttpRoute 行以使 WebApiConfig.cs 如下所示,则上面的 URL 有效:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
//config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "api/{controller}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
}
我做错了什么?是什么导致配置DefaultApi路由时属性路由失败?我试过将它 before/after 放在 config.MapHttpAttributeRoutes();两者都不起作用。
顺便说一句,我在阅读以下文章时手动构建了这个项目,它与 MVC/Web API 项目具有相同的结构并且确实有效。我只是不知道我做了什么不同的事情。
感谢 @phil-cooper the