Web api路由只允许一个控制器

Web api routing only permits one controller

我创建了一个新的 Web API 项目并创建了以下路由规范(实际上我已经简化了,寻找错误):

  // Web API configuration and services
  config.Routes.MapHttpRoute(
      name: "DefaultApi",
      routeTemplate: "api/{controller}/{action}/{id}"
   );

当我通过 ajax 使用路由拨打电话时:

 /api/account/GetSUID/0 

一切正常。当我只使用不同的控制器时:

 /api/tile/GetTileSet/0

它 returns 状态为 200 但它没有击中我的控制器,它只是 returns jqXHR.responseText[=32= 中默认页面的内容]!就好像它只是跳过任何 API 路由,就像我请求默认站点页面一样。

我对这个感到困惑,因为在过去的几年里,我在其他几个项目中编写了数百个 Web API 函数。我在调用多个控制器时从未遇到过任何问题。我对这里可能发生的事情进行了高度和低估,希望这里有人可能有想法。

这是控制器上的示例方法:

    [HttpGet]
    public HttpResponseMessage CheckRequestedID(int id, [FromUri]string Search)
    {
        if (!BSDIUtil.HasAllAcceptableCharacters(Search))
            return Request.CreateResponse(HttpStatusCode.BadRequest);
        if (FolderModel.IDAlreadyExists(DAL, Search))  // We can check this because this function is only called when staff members are creating accounts for other people (participants always use their email).
            return Request.CreateResponse(HttpStatusCode.OK, false);
        else
            return Request.CreateResponse(HttpStatusCode.OK, true);
    }

这在帐户控制器上有效,但在磁贴控制器上无效。

另外一件事,我使用的是 Visual Studio 和 Windows 8.1

的 "Community" 版本

这不是一个可能经常出现的问题,但我已经解决了它,并且我想我会post在这里,以防其他人遇到同样的问题。

我在标准网络表单应用程序的上下文中使用网络 api(尽管我只在我的报告页面中使用网络表单)。在 Web 表单应用程序的 web.config 中,您可以声明用户在进行身份验证之前有权访问的路径。我只提供对帐户控制器的访问:由于我的身份验证机制,所有其他人都不允许。一旦我进行身份验证(例如表单身份验证调用)或者如果我将位置路径更改为仅包含 "api",问题就会消失。

我遇到了同样的问题,但情况不同。有许多控制器和各自的路由模板。只有一个控制器正在响应请求。 后来我意识到我的另一个控制器 类 不是 public!!