gpt4 book ai didi

c# - 如何修复 webAPI 中不正确的操作路由

转载 作者:行者123 更新时间:2023-11-30 21:27:21 25 4
gpt4 key购买 nike

在测试 HTML 页面中通过 JS 调用我的 API 时,它无法返回任何结果。做一些研究,我得出的结论是它要么没有找到我的 API Controller (不太可能因为它使用一些示例代码返回结果但 URI 相同)或者找到它但没有找到正确的操作。该应用程序的要点是发送 YouTube 搜索请求并接收返回的结果列表。

我已经尝试在整个代码中设置断点,它似乎只在 HTML 页面上运行 JS,但从未真正击中 Controller 本身。当我添加一个不带参数的新方法以仅返回确实返回结果的列表的一个结果时,这种情况发生了变化,但似乎没有任何改变后不久就停止工作。

这是调用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 }
);

这是我要调用的 Controller 方法

[HttpGet]
public IHttpActionResult GetSearch(string search)
{
getyoutuberesults(search);
var results = searcheslist;
return Ok(results);
}

以及搜索 Controller 的名称,它出现在代码中并删除了其中的方法:

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 资源'.在与请求匹配的 Controller “搜索”上找不到任何操作。

最佳答案

路由模板参数名称不匹配。默认约定路由具有 {id} 而 Controller 操作具有 search 参数。这会导致找不到所需操作的匹配项 (404)。

首先启用属性路由,考虑使用它

// Attribute routing.
config.MapHttpAttributeRoutes(); //<---THIS HERE BEFORE CONVENTION BASED ROUTING

// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

并相应地装饰 Controller

[RoutePrefix("api/search")]
public class SearchController : ApiController {

//...

//GET api/search/word
[HttpGet]
[Route("{search}")]
public IHttpActionResult GetSearch(string search) {
var results = getyoutuberesults(search);
return Ok(results);
}

//...
}

引用 Attribute Routing in ASP.NET Web API 2

关于c# - 如何修复 webAPI 中不正确的操作路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57830389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com