c# - 如何从 ASP.NET Core 页面调用我的 API 控制器对象?
问题描述
我这里的措辞可能都错了,如果我用错了词,请原谅并纠正我。我来自传统的 ASP.Net Web 应用程序世界,我可以简单地将 ApiController 添加到我的 Web 应用程序项目中并开始运行。但是,我现在使用的 ASP.Net Core Web 应用程序似乎并非如此。
我创建了一个 Web 应用程序项目:
选择 Web 应用程序的类型:
然后我将控制器添加到根目录:
为它写了一小段代码:
[Route("[controller]")]
[ApiController]
public class ModulesController : ControllerBase {
[HttpPost]
[Route("Modules/Execute")]
public void Execute([FromBody] string key) => ModuleManager.Instance.TryExecute(key);
}
然后尝试用以下方式调用它AJAX
:
$.ajax(
{
contentType: "application/json",
data: JSON.stringify({ executionKey: executionKey }),
dataType: "jsond",
type: "POST",
url: "/Modules/Execute",
failure: function (msg) {
alert("failure");
},
success: function (msg) {
alert("success");
}
});
Annnnnd 我收到一个 404 错误,说找不到。
现在,我尝试了其他几件事,例如:
- 改变得到。
Route
从控制器上卸下。- 将控制器路由映射添加到
Startup.cs
:
^
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action=Index}/{id?}");
一路上还有其他几次失败的尝试。我显然错过了这个新设置的一些基本内容,我无法弄清楚它是什么。
如何从我的 ASP.NET Core 网页调用我的 API 控制器?
注意:我尝试手动将其作为 aGET
来查看是否可能是路径问题,并且无论我尝试了多少不同的组合,都无法以这种方式进行。
解决方案
被调用的 URL
"/Modules/Execute"
与控制器上的路由不匹配。
[Route("[controller]")] //<- Prefixes all Actions on this controller with controller name
[ApiController]
public class ModulesController : ControllerBase {
[HttpPost]
[Route("Modules/Execute")] //<- This route resolves to: POST Modules/Modules/Execute
public void Execute([FromBody] string key) => ModuleManager.Instance.TryExecute(key);
}
因此,要么更新客户端以调用正确的 URL,要么将控制器路由更新到所需的 URL。
推荐阅读
- php - 获取 3 个模型之间的相关记录
- python-3.x - 如何从 PDF 嵌入 HTML 的 URL 下载 PDF 文件?
- javascript - Selenium Webdriver Javascript - 使用 sendKeys 键入法语
- html - div内图像的边距和垂直对齐
- heroku - 免费 Heroku Postgres 数据库的 4 小时停机时间是什么时候?
- python - 如何通过请求抓取具有不变 URL 的特定页面
- git - 如何使 GIT 本地匹配远程(好像刚刚克隆)?
- php - 为特定产品类别向 Woocommerce 产品添加自定义字段
- c# - MongoDB C# Driver Find not throwing System.FormatException 反序列化错误并成功运行
- saxon - 我如何在 Java 上的 Saxon 中“为……订购”