WebApi HTTPPOST端点未被命中

时间:2016-10-17 08:56:09

标签: asp.net-web-api

我有以下简单的HTTPPOST端点;

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

控制器的装饰如下;

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

现在,当我尝试在postman中测试此端点时,使用以下URL;

  

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

使用消息正文中的字符串

我得到以下回报。

  

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

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

  

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

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

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

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

然后使用[FromBody]

将DTO添加为方法参数
[AllowAnonymous]
[HttpPost]
[Route("forgotPassword")]
public IHttpActionResult ForgotPassword([FromBody] forgetPasswordDTO data)

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

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

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

Here's关于此主题的好文章