簡體   English   中英

郵遞員無法為C#Web API的字典參數設置值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM