首页 > 解决方案 > 如何从 ASP.NET Core 页面调用我的 API 控制器对象?

问题描述

我这里的措辞可能都错了,如果我用错了词,请原谅并纠正我。我来自传统的 ASP.Net Web 应用程序世界,我可以简单地将 ApiController 添加到我的 Web 应用程序项目中并开始运行。但是,我现在使用的 ASP.Net Core Web 应用程序似乎并非如此。

我创建了一个 Web 应用程序项目:

ASP.NET Core 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 错误,说找不到。

开发工具错误

现在,我尝试了其他几件事,例如:

^

endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller}/{action=Index}/{id?}");

一路上还有其他几次失败的尝试。我显然错过了这个新设置的一些基本内容,我无法弄清楚它是什么。


如何从我的 ASP.NET Core 网页调用我的 API 控制器?

注意:我尝试手动将其作为 aGET来查看是否可能是路径问题,并且无论我尝试了多少不同的组合,都无法以这种方式进行。

标签: c#apiasp.net-corerazor-pagesweb-application-project

解决方案


被调用的 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。


推荐阅读