[英]How to pass dictionary as part of the payload in POST request in Advanced Rest Client
[英]How to post and cast payload?
我的目标是调用 api(通过 post),接受有效负载作为基本类型,然后将其转换为具体类型。 如果我从主要解决方案(我的 api 所在的位置)执行此操作,则一切正常。 但我不明白为什么相同的代码不适用于其他解决方案。
所以我有我的要求(在不同的解决方案中声明)
namespace Nb
{
public class NbRequestBase
{
public string BaseProp { get; set; }
}
public class NbRequestConcrete : NbRequestBase
{
public string ConcreteProp { get; set; }
}
}
这是我的终点:
[HttpPost]
[Route("payments/nb")]
public IHttpActionResult Prepare(NbRequestBase request)
{
if(request is NbRequestConcrete)
{
}
try
{
// <<< INSERT CODE HERE >>>
NbRequestConcrete nbRequestConcrete = (NbRequestConcrete)request;
return Ok();
}
catch (Exception ex)
{
_logger.Error(ex);
return InternalServerError();
}
}
这是我的调用代码:
NbRequestConcrete requestTwo = new NbRequestConcrete()
{
BaseProp = "BaseProp",
ConcreteProp = "ConcreteProp"
};
using (var client = new HttpClient())
{
var _clientId = "_clientId";
var _clientSecret = "_clientSecret";
client.BaseAddress = new Uri("http://localhost:50228");
#region Formatter
JsonMediaTypeFormatter formatter = new JsonMediaTypeFormatter();
formatter.SerializerSettings.TypeNameHandling = TypeNameHandling.All;
List<MediaTypeFormatter> formatters = new List<MediaTypeFormatter>();
formatters.Add(formatter);
#endregion
var responseMessage = client.PostAsync($"payments/nb?clientId={_clientId}&clientSecret={_clientSecret}", requestTwo, formatter).Result;
responseMessage.EnsureSuccessStatusCode();
}
如果我将调用代码放入其他项目/解决方案(例如只是新的控制台应用程序),API 端点被命中,但有效负载为空。
如果我将完全相同的调用代码放入我的 api 所在的项目中(例如,在相同的 API 端点方法中,在 try/catch 块开始并再次调用它),API 端点被命中,有效负载不为空并且强制转换有效。 为什么? 以及如何解决?
顺便说一句。 如何通过邮递员拨打这个电话?
问候
此行告诉模型绑定器将request
中任何匹配属性的值设置为传递给 API 的值:
public IHttpActionResult Prepare(NbRequestBase request)
模型绑定器不会将所有其他属性附加到请求中,因为它不知道它们会是什么。
问题是程序集名称,其中控制台应用程序中的 NbRequestConcrete 位于一个程序集中,而 API 位于另一个程序集中。 所以要求不同。
{
"$type": "Nb.NbRequestConcrete, Tester",
"ConcreteProp": "ConcreteProp",
"BaseProp": "BaseProp"
}
VS
{
"$type": "Nb.NbRequestConcrete, MYApi",
"ConcreteProp": "ConcreteProp",
"BaseProp": "BaseProp"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.