2017-01-19 3 views
0

У меня есть контроллер в этой структуре папок: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

+1

Это не сразу очевидно, но что-то, что торчит, является вашим 'EventsController', похоже, что он наследует контроллер Mvc, а не Api. Кроме того, Какова цель 'EventsController'? Это контроллер Mvc, возвращающий представление, но с/api/route? Я предполагаю, что маршрутизация атрибутов путается, потому что она находится на контроллере Mvc. –

+0

Спасибо! Всего 3 персонажа не на месте, и все идет с ревкой! –

+0

Без проблем, рад, что он работает. –

ответ

0

Благодаря @phil-cooperanswer был наследовать правильный базовый класс в контроллере апи.

Смежные вопросы