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

Web api路由只允许一个控制器,web,asp.net-web-api,Web,Asp.net Web Api,我创建了一个新的Web API项目,并创建了以下路由规范(实际上,我已经进行了简化,寻找bug): 当我通过ajax通过路由进行呼叫时: /api/account/GetSUID/0 一切正常。当我使用不同的控制器时: /api/tile/GetTileSet/0 它返回的状态是200,但它没有点击我的控制器,而是返回jqXHR.responseText中默认页面的内容!就像我请求默认站点页面一样,它只是跳过了任何API路由 在过去几年中,我在其他几个项目中编写了数百个web API函

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

当我通过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的“社区”版。这不是一个经常出现的问题,但我已经解决了,我想我会在这里发布它,以防其他人也有同样的问题


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

我遇到了相同的问题,但情况不同。有许多控制器和各自的路由模板。只有一个控制器响应请求。
后来我意识到我的其他控制器类不是公共的

也许你的浏览器缓存了响应。。。如果使用jquery发送AJAX请求,可以尝试设置
cache:false
选项。是否可以共享操作方法的定义(包括任何属性)?我假设您已经验证了请求是否确实指向正确的URL(即,这不是客户端问题)?nemesv-当我将控制器切换到“帐户”时,调用成功,因此不会出现缓存问题。蚂蚁也行。这些调用都是相对的,如果我更改了默认文档,就会返回新的默认文档。
    [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);
    }