找不到与名为“help”的控制器匹配的类型

时间:2013-12-04 15:05:44

标签: asp.net asp.net-mvc asp.net-web-api routing

我一直关注this guide添加帮助页面来记录我的Web API项目。我的控制器名为HelpController,我有一条路线,我试图将索引操作映射到/帮助。这是项目中唯一的MVC控制器。因为其余的是Web API控制器,我们从WebAPIConfig.cs中的默认路由中删除了“/ api”前缀。

HelpController:

public class HelpController : Controller
{
    public ActionResult Index()
    {
        var apiExplorer = GlobalConfiguration.Configuration.Services.GetApiExplorer();
        return View(apiExplorer);
    }
}

路由配置:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "help",
            defaults: new { controller = "Help", action = "Index"});

    }
}

在Global.asax.cs

protected void Application_Start()
{
  // ..
  WebApiConfig.Register(GlobalConfiguration.Configuration);
  RouteConfig.RegisterRoutes(RouteTable.Routes);
  // ..
}

但是当我尝试在浏览器中导航到/ help时,我收到以下错误消息。

<Error>
  <Message>No HTTP resource was found that matches the request URI 'http://localhost/ws/help'.</Message>
  <MessageDetail>No type was found that matches the controller named 'help'.</MessageDetail>
</Error>

编辑:该消息包含/ ws / help,因为应用程序托管在IIS中的localhost / ws。

有谁知道是什么原因导致ASP.NET找不到我的HelpController?

更新:如果我在Application_Start中更改RouteConfig和WebApiConfig注册调用的顺序,我会改为使用404。

protected void Application_Start()
{
  // ..
  RouteConfig.RegisterRoutes(RouteTable.Routes);
  WebApiConfig.Register(GlobalConfiguration.Configuration);
  // ..
}

3 个答案:

答案 0 :(得分:6)

当您从路由模板中删除help时,Web API的路由正在匹配api的请求。如果请求与路由匹配,则不对其余路由进行进一步探测。 您可能在Global.asax中具有默认顺序,其中首先注册Web API路由,然后是MVC路由。你能分享你的Global.asax的样子吗?

编辑: 根据您的上一条评论,如果您安装HelpPage nuget包,请确保Global.asax中的订单如下所示:

AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
RouteConfig.RegisterRoutes(RouteTable.Routes);

答案 1 :(得分:1)

我今天也遇到了同样的错误。

<Error>
  <Message>No HTTP resource was found that matches the request URI 'xxx'.</Message>
  <MessageDetail>No type was found that matches the controller named 'xxx'.</MessageDetail>
</Error>

在我的情况下经过2天的debuging后,我终于通过将microsoft report viewer dll设置为&#34; Copy to local&#34;来解决它。对我来说没关系它是如何相关的,但maby这将有助于某人。

答案 2 :(得分:0)

我得到了同样的错误:

Error><Message>No HTTP resource was found that matches the request URI 'http://localhost:53569/api/values'.</Message><MessageDetail>No type was found that matches the controller named 'values'.</MessageDetail></Error>

默认情况下,当我在asp.net Web表单应用程序中创建新控制器时,它是这样的:

ValuesController1 : ApiController

我只是简单地删除了“1”,然后成功:

ValuesController : ApiController

它有效,不知道它是不是一个bug或其他什么,但它给我带来了很大的麻烦。