【发布时间】:2023-03-07 04:53:01
【问题描述】:
我在另一个 Web 应用程序中部署并使用了 Web API 服务。 Web API 方法采用复杂对象(列表对象)和结果也是复杂对象。
所以我为输入参数和结果模型创建了本地模型,以匹配 Web 应用程序中的 Web API 复杂对象。然后我为那个参数传递了JsonConvert.SerializeObject。但是当我在 Web API 中调试时,参数值显示为 null。
网络应用程序
[Serializable]
public class PreferencesInput
{
public string ShortName { get; set; }
public string ShortNameDescription { get; set; }
.....
}
[Serializable]
public class PreferencesOuput
{
public bool Status { get; set; }
public string Error { get; set; }
}
public class HomeController : Controller
{
public ActionResult Index()
{
RunAsync().Wait();
return View();
}
private static async Task RunAsync()
{
var inputs = new List<PreferencesInput>();
var input = new PreferencesInput
{
ShortName = "REGION",
ShortNameDescription = "Geographical regions",
OptedInFlag = true
};
inputs.Add(input);
....
...
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:8585/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
try
{
HttpResponseMessage response = await client.GetAsync("preferences/updatepreferences/?id='3016523'
&optInInterestAreas=" + JsonConvert.SerializeObject(inputs) +
"&solicitationFlag=false").ConfigureAwait(false);;
if (response.IsSuccessStatusCode)
{
string results = await response.Content.ReadAsStringAsync();
var myList = JsonConvert.DeserializeObject<List<PreferencesOuput>>(results);
}
网络 API
[Route("preferences/updatepreferences")]
[HttpGet]
public PreferencesOuput UpdatePreferences(string id, IEnumerable<PreferencesInput> optInInterestAreas, bool solicitationFlag)
{
.....
}
唯一的区别是 Web 应用程序输入模型比 Web API 模型具有更少的参数。
我在这里做错了什么?
IEnumerable<PreferencesInput> optInInterestAreas 为空
更新
在发送到 Web API 调用之前,我可以看到如下所示的序列化日期,在 Web API 方法中它显示为 null,其余参数显示正确。
[{"ShortName":"REGION","ShortNameDescription":"Geographical regions","ShortSubName":null,"Description":null,"OptedInFlag":true},
{"ShortName":"REGION","ShortNameDescription":"Asia Pacific","ShortSubName":"ASIA_PACIFIC","Description":null,"OptedInFlag":true},
{"ShortName":"REGION","ShortNameDescription":"Canada","ShortSubName":"CANADA","Description":null,"OptedInFlag":true}]
【问题讨论】:
-
只是想知道您是否已验证您的查询字符串是否正确
-
您的查询字符串无效。可以试试 HttpPost 吗?
标签: c# asp.net-mvc asp.net-web-api