【发布时间】:2020-01-09 19:49:52
【问题描述】:
在测试 HTML 页面中通过 JS 调用我的 API 时,它无法返回任何结果。做了一些研究,我得出的结论是,它要么没有找到我的 API 控制器(不太可能,因为它使用一些示例代码但使用相同的 URI 返回了结果),或者正在找到它但没有找到正确的操作。该应用程序的重点是发送一个 youtube 搜索请求并接收返回的结果列表。
我尝试在整个代码中设置断点,它似乎只通过 HTML 页面上的 JS 运行,但从未真正命中控制器本身。当我添加一个不带参数的新方法只返回列表的一个结果时,这种情况发生了变化,该结果确实返回了结果,但在看似没有改变任何东西后不久就停止了工作。
这是调用 API 的 HTML 文档中的代码
var uri = 'api/Search';
function formatItem(item) {
return item.title;
}
function find() {
var word = $('#srval').val();
$.getJSON(uri + '/' + word)
.done(function (data) {
$('#product').text(formatItem(data));
})
.fail(function (jqXHR, textStatus, err) {
$('#product').text('Error: whyyyyyyyyyyyyy');
});
}
这是用于 API 路由的默认代码:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
//defaults: new { id = RouteParameter.Optional }
defaults: new { id = RouteParameter.Optional }
);
这是我试图调用的控制器方法
[HttpGet]
public IHttpActionResult GetSearch(string search)
{
getyoutuberesults(search);
var results = searcheslist;
return Ok(results);
}
以及代码中显示的搜索控制器的名称,其中删除了其中的方法:
public class SearchController : ApiController
{
...
}
预期结果是 HTML 标记“product”填充了 YouTube 搜索 HTML 标记“srval”值的结果。
相反,页面只是在点击搜索按钮时冻结,并且如上所述似乎从未到达 GetSearch 方法。直接访问 URI localhost:44345/api/Search/[search term] 会导致以下错误消息:
未找到与请求 URI 'https://localhost:44345/api/Search/test' 匹配的 HTTP 资源。 在与请求匹配的控制器“搜索”上未找到任何操作。
【问题讨论】:
标签: c# asp.net-web-api asp.net-web-api-routing