【问题标题】:Unable to access an endpoint in ASP.NET Core 3.1 Web API Controller, from View无法从视图访问 ASP.NET Core 3.1 Web API 控制器中的端点
【发布时间】:2020-04-22 02:28:49
【问题描述】:

我在 ASP.NET Core 3.1 中有一个 WEB Api 项目;我正在尝试使用相同的控制器来显示视图以及端点。该视图将允许用户输入数据库连接参数并 POST 到控制器中的端点,控制器会将这些设置写入文件。

我只能在从 Controller 派生后才能显示视图(从控制器基础更改)。此链接https://docs.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-3.1 表示,如果您计划对视图和 API 使用相同的控制器,则应从 Controller 派生。

我能够显示我的视图,但我无法发布(使用 ajax)到同一控制器中的端点。我收到以下错误:-

加载资源失败:服务器响应状态为 400。

我的控制器被命名为连接控制器,我的端点是 SaveConnection()

我正在尝试使用 ajax 发布到 SaveConnection 端点,但我收到了错误(来自上面的控制台)。

我在视图中的代码如下所示。

看起来当发布到端点 Connection/SaveConnection 时,我无法到达端点,因此出现 400 消息。

关于如何解决此问题的任何想法?

【问题讨论】:

    标签: c# asp.net-core asp.net-web-api


    【解决方案1】:

    你应该先序列化你的 obj。 您可以尝试将“data:obj,”行替换为“data:JSON.stringify(obj),”吗?

    【讨论】:

    • 让我提一下,我已将此 A​​PI 从 .NET Core 2.2 升级到 .NET 3.1。代码在 .NET Core 2.2 中运行良好我认为问题可能出在路由上,这可能就是控制器未被识别为“资源”的原因。这只是猜测,我当然可能是错的。与此同时,我仍在研究解决方案。 Zekeriya kocairi 以原样传递对象,应该可以正常工作。我在 .NET Core 2.2 Web API 中运行相同的代码,完全没有问题。
    • 好的。您可以逐步改进您的解决方案。我会首先尝试将发布请求发送到没有参数且没有安全属性的端点,然后您可以确定您的问题真的与路由有关。但它可能与参数有关。您也可以在参数前添加 [Frombody]。它应该是强制性的。这个属性应该是强制性的,因为你在控制器上有 [ApiController] 属性
    • Zekeriya Kocairi,你是对的!!!你的建议为我指明了正确的方向。在视图中,我更改了表单,使表单标记具有 asp-action = "SaveConnection" 和 asp-controller="Connection"。我的按钮是 type="submit" 而不是 "button"。我的 SaveConnection Action 参数是 [FromForm]。我现在可以访问我的操作,唯一的缺点是我不再使用 ajax 进行发布。但是我的 jquery 验证工作正常。谢谢!!
    • 很高兴听到您解决了问题。祝您在以下挑战中好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    相关资源
    最近更新 更多