【问题标题】:WebApi HTTPPOST Endpoint not being hit未命中 WebApi HTTPPOST 端点
【发布时间】:2016-10-17 17:31:44
【问题描述】:

我有以下简单的 HTTPPOST 端点;

[AllowAnonymous]
[HttpPost]
[Route("forgotPassword")]
public IHttpActionResult ForgotPassword(string userName, string callbackUrl)

其中控制器装饰如下;

[Authorize]
[RoutePrefix("api/accounts")]
public class AccountsController : ApiController

现在,当我尝试在邮递员中测试此端点时,使用以下网址;

http://localhost:11217/api/accounts/forgotPassword

消息正文中的字符串

我得到以下回报。

{ "Message": "没有找到与请求匹配的 HTTP 资源 URI 'http://localhost:11217/api/accounts/forgotPassword'。",
"MessageDetail": "在控制器 'Accounts' 上找不到任何操作 匹配请求。” }

现在我宁愿不必为两个字符串创建模型(如果可能的话)。此外,如果我尝试将参数放在查询字符串中,我会得到一个潜在危险的请求响应

http://localhost:11217/api/accounts/forgotPassword/test&callbackUrl=local

有人可以帮忙吗?

【问题讨论】:

    标签: asp.net-web-api


    【解决方案1】:

    如果你想在发布请求时发送多个参数,你应该创建一个包含参数的 DTO

    public class forgetPasswordDTO
    {
        public string userName { get; set; }
        public string callbackUrl { get; set; }
    }
    

    然后将 DTO 添加为带有 [FromBody] 的方法参数

    [AllowAnonymous]
    [HttpPost]
    [Route("forgotPassword")]
    public IHttpActionResult ForgotPassword([FromBody] forgetPasswordDTO data)
    

    在您的客户端中,将对象创建为

    var data = {
        'userName': user,
        'callbackUrl': url
    };
    

    并将其添加到请求的正文中。

    Here's 一篇关于这个话题的好文章

    【讨论】:

    • 我是这么想的,我只是希望活页夹能够解决这个问题。
    • [FromBody] 应该只用于简单类型(例如字符串)。对于 POST 请求中的 DTO 对象,绑定器应尝试自动从请求正文中读取它。见asp.net/web-api/overview/formats-and-model-binding/…
    • @ADyson 谢谢,不知道。
    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多