Asp.net 核心传递多个参数 + web api

Asp.net core passing multiple parameter + web api

我正在提交一个将三个值传递给控制器​​的表单,它们是电子邮件、全名和 ID 字段。

 @using (Html.BeginForm("SubmitResult", "TestAPI", FormMethod.Post, new { id = "postEmailForm" }))    
{
    <div id="details-container">
        <input type="text" name="email" />
        <input type="text" name="fullName" />
        <input type="text" name="studentId" />

        <button type="submit" id="send">Send</button>
    </div>
}   

控制器:

  [HttpPost("SubmitResult/{email}/{fullName}/{studentId}")]
    [Authorize(Roles = "Admin, Shop")]
    public IActionResult SubmitResult(string email, string fullName, long? studentId)
    {
    }

但是,当我点击提交按钮时,它会在控制台中抛出一条错误消息。

OPTIONS https://localhost:50138/TestAPI/SubmitResult net::ERR_SSL_PROTOCOL_ERROR.

Headers:

Request URL: https://localhost:50138/TestAPI/SubmitResult

Referrer Policy: no-referrer-when-downgrade

如何正确装饰控制器中的属性,以便我可以传递多个参数来使用 Postman 测试 API?

我期待像下面这样的东西用于测试。

http://localhost:50138/api/TestAPI/SubmitResult/test@gmail.com/MikeShawn/2

您的代码几乎没有问题。

第一个问题是,当您 post 它尝试使用跨源请求发送数据时,它看起来像是。如果这是故意的,那么您必须在管道中添加 CORS 中间件。如果不是 - 你必须找出它发生的原因并修复它。你的问题中没有足够的细节来说明为什么会这样。

Two URLs have the same origin if they have identical schemes, hosts, and ports.

第二个问题是您试图通过向 URL 添加参数来发送数据。这是错误的,因为数据将在请求正文中发送。所以关于 HttpPost 属性应该是这样的:

[HttpPost]
[Authorize(Roles = "Admin, Shop")]
public IActionResult SubmitResult(string email, string fullName, long? studentId)
{
}

更新

刚刚又看了你的问题。似乎带有表单的页面本身是使用 http 方案打开的,但 POST 请求实际上是使用 https 方案打开的。因此,要解决第一个问题,请确保也使用 https 方案加载带有表单的页面。