gpt4 book ai didi

c# - Web API POST 失败,使用 RestSharp 添加了 FromUri 参数

转载 作者:行者123 更新时间:2023-11-30 17:40:49 32 4
gpt4 key购买 nike

在我看来,尝试使用带有 RestSharp 客户端的 WebApi POST 方法时会发生一些奇怪的事情。下面的代码分别适用于服务器(WebApi)和客户端。

服务器 WebApi

[Route("UserRoles")]
[AllowAnonymous]
public IHttpActionResult Post(
[FromBody] UserroleDto userroleDto,
[FromUri] string appCode)
{
return OK();
}

测试客户端:

[TestInitialize()]
public void Initialize()
{
_restClient = new RestClient("http://localhost:8089");
}

[TestMethod]
public void Can_Store_A_Userrole_Via_REST_WebAPI()
{
var request = new RestRequest(ApiBasePath, Method.POST);

request.AddUrlSegment("segment", "UserRoles");
request.RequestFormat = DataFormat.Json;
request.AddBody(
new UserroleDto()
{
UserRoleId = -1,
Role = "Developer"
});

request.AddHeader("appCode", AppCode);
//request.AddParameter("appCode", AppCode);

_restClient.Execute(request);
}

场景是:

  1. 如果我注释掉 POST 方法中的 [FromUri] 字符串 appCode 和测试中的 request.AddParameter("appCode", AppCode);,测试通过。
  2. 如果我在 POST 方法中包含 [FromUri] 字符串 appCode 并且我从 POSTMAN 运行该方法,则测试通过。
  3. 如果我在 POST 方法和 request.AddParameter("appCode", AppCode); 中分别包含 [FromUri] string appCode 在测试中,测试失败。错误信息:在 Controller 上找不到方法

欢迎任何建议!

最佳答案

首先,我将解释您在场景中遇到的行为。然后我会提供解决方案。

  1. 如果我从 POST 方法中注释掉 [FromUri] 字符串 appCode和 request.AddParameter("appCode", AppCode);从测试中,测试通过。

在这种情况下,服务器不希望任何地方有 appCode 并且测试也不会发送它。测试似乎通过了,但我认为它是误报。服务器根本没有收到 appCode!

  1. 如果我在 POST 中包含 [FromUri] 字符串 appCode方法,我从 POSTMAN 运行该方法,测试通过。

我猜你在 POSTMAN 中使用了这个 URL:

http://localhost:8089/UserRoles?appCode=SomeAppCode

在这种情况下,ASP.NET Web API 从 URL 中提取 appCode,从正文中提取 DTO。然后服务器方法按预期执行。

  1. 如果我在 POST 方法中包含 [FromUri] 字符串 appCode 并且request.AddParameter("appCode", AppCode);分别在测试中,测试失败。错误消息:在 Controller 上找不到方法

失败的原因是 appCode 被添加到正文中。但是,服务器希望它在 uri 中。因此,框架找不到与 uri 匹配的方法并抛出上述错误。

解决方案

如果可以,我会更改路线和您的操作:

[Route("UserRoles/{appCode}"]
[AllowAnonymous]
public IHttpActionResult Post(string appCode, UserroleDto userroleDto)
{
return OK();
}

通过此更改,url 变为:

http://localhost:8089/UserRoles/SomeAppCode

并且body可以放入body中。

那么您的测试代码将是:

[TestMethod]
public void Can_Store_A_Userrole_Via_REST_WebAPI()
{
var request = new RestRequest(ApiBasePath, Method.POST);

request.AddUrlSegment("segment", "UserRoles");
request.AddUrlSegment("segment", AppCode);
request.RequestFormat = DataFormat.Json;
request.AddBody(
new UserroleDto()
{
UserRoleId = -1,
Role = "Developer"
});

_restClient.Execute(request);
}

关于c# - Web API POST 失败,使用 RestSharp 添加了 FromUri 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33829292/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com