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