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

时间:2015-02-07 21:14:39

标签: web asp.net-web-api

我创建了一个新的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

它返回状态200,但它不是命中我的控制器,而是返回 jqXHR.responseText 中默认页面的内容!好像它只是跳过任何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版本

2 个答案:

答案 0 :(得分:0)

这不是一个可能经常发生的问题,但我已经解决了这个问题,并认为如果其他人有同样的问题,我会在这里发布。

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

答案 1 :(得分:0)

我面临同样的问题,但在不同的背景下。有很多控制器和相应的路由模板。只有一个控制器响应请求。 后来我意识到我的其他控制器类不是公开 !!