子文件夹中的Web API控制器未找到属性路由

时间:2017-01-19 07:30:13

标签: asp.net-mvc asp.net-web-api asp.net-mvc-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路由时,导致属性路由失败的原因是什么?我试过在config.MapHttpAttributeRoutes()之前/之后放置它;并且都不起作用。

顺便说一句,我在阅读以下文章时手动构建了这个项目,该文章具有与MVC / Web API项目相同的结构,并且可以正常工作。我无法弄清楚我的做法有多么不同。

http://www.codemag.com/Article/1605081

1 个答案:

答案 0 :(得分:1)

感谢@phil-cooperanswer是在api控制器中继承正确的基类。