У меня есть контроллер в этой структуре папок:Web-контроллер API, в подкаталоге не найден с атрибутом маршрутизации
Site
-Controllers
--API
---EventsController.cs
The EventsController.cs содержит следующее:
[RoutePrefix("api")]
public class EventsController : Controller
{
[Route("event")]
public ActionResult Index()
{
return View("~/Views/Home/Index.cshtml");
}
The 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 I не вижу ничего, кроме этой ошибки:
<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? Я попытался разместить его до/после config.MapHttpAttributeRoutes(); и никто не работает.
Как в стороне, я вручную создал этот проект, прочитав следующую статью, которая имеет ту же структуру проекта MVC/Web API и которая работает. Я просто не могу понять, что я сделал по-другому.
http://www.codemag.com/Article/1605081
Это не сразу очевидно, но что-то, что торчит, является вашим 'EventsController', похоже, что он наследует контроллер Mvc, а не Api. Кроме того, Какова цель 'EventsController'? Это контроллер Mvc, возвращающий представление, но с/api/route? Я предполагаю, что маршрутизация атрибутов путается, потому что она находится на контроллере Mvc. –
Спасибо! Всего 3 персонажа не на месте, и все идет с ревкой! –
Без проблем, рад, что он работает. –