[英]Postman unable to set values to dictionary parameter for C# web api
我下面編寫了用於測試從Postman讀取字典鍵和值的代碼。
C#Web API方法:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "Service/testdictionary",
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void testdictionary(Dictionary<string,object> data)
{
if(data != null)
{
string str1 = data["a1"].ToString();
string str2 = data["a2"].ToString();
string str3 = data["a3"].ToString();
}
}
郵遞員輸入正文:(原始和JSON(application / json))
{
"data": {
"a1": "b1",
"a2": "b2",
"a3": "b3"
}
}
我如何從Postman調用該方法:
問題是什么:每當我嘗試從郵遞員分配字典對象數據時,在C#代碼中,它將被分配為空字典。
需要什么:我想從郵遞員到我的API代碼讀取字典元素。
您的項目不是data["a1"]
, data["a2"]
等。您有一個項目的字典,其關鍵字是“ data”,所以它是data["data"]
。 您對該項的值是具有a1,a2和a3屬性的對象。 不知道它是什么,出來的作品在您的WCF應用程序,但在Web API一個JToken
從Newtonsoft Json.Net庫。
如果要使用鍵a1,a2,a3的Dictionary
,則需要調整JSON主體以排除“數據”級別:
{
"a1": "b1",
"a2": "b2",
"a3": "b3"
}
更新
如果由於某種原因而無法更改JSON結構,則可以創建一個data
類型為Dictionary<string,object>
:
public class TheData
{
public Dictionary<string, object> data {get;set;}
}
然后,您的api方法將采用TheData
類型而不是Dictionary<string,object>
:
public void testdictionary(TheData _data)
{
...
並且您的代碼將訪問字典,例如:
string d1 = _data.data["a1"].ToString(); // d1 == "b1"
嘗試這個。
我試過了! 它工作正常。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace StackOverFlowProblemWebApi.Controllers
{
public class TestController : ApiController
{
[HttpPost]
public IHttpActionResult TestDictionary([FromBody]Dictionary<string,object> data)
{
if (data != null)
{
string string1 = data["a1"].ToString();
string string2 = data["a2"].ToString();
string string3 = data["a3"].ToString();
return Ok("Data Recieved."); // When the data is successfully recieved.
}
else
return BadRequest("Data is not received.");
}
}
}
看! 您是否看到:數據已收到。 ...
設法解決了我的問題,可以說出類似的字典。
解決方案:使用類對象而不是字典。
這是我的解決方案:
我添加了一個類,其結構與我想要的字典相似(唯一的問題是我必須編寫額外的代碼行才能使用Keys聲明類,這是我之前避免的)
這是我來自Web API的代碼:
public class mydictionary
{
public string a1 { get; set; }
public string a2 { get; set; }
public string a3 { get; set; }
}
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "Service/testdictionary",
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string testdictionary(mydictionary data)
{
if (data != null)
{
string str1 = data.a1.ToString();
string str2 = data.a2.ToString();
string str3 = data.a3.ToString();
return "success".ToString();
}
else
{
return "unsuccess".ToString();
}
}
這是我的郵遞員輸入和輸出: 郵遞員屏幕截圖
就我而言,它以ActionParam = [{Key:'orderId',Value:'200'}]的格式工作; “ ActionParam”是模型中的字典屬性,並且也在WCF上進行了測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.