2016-05-16 11 views
5

मुझे हमेशा शरीर से शून्य मूल्य मिलता है क्यों? मुझे फिडलर का उपयोग करने में कोई समस्या नहीं है लेकिन पोस्टमैन असफल है।शरीर में पोस्ट जेसन डेटा वेब एपीआई

मुझे लगता है कि जैसे एक वेब एपीआई है:

[Route("api/account/GetToken/")] 
    [System.Web.Http.HttpPost] 
    public HttpResponseBody GetToken([FromBody] string value) 
    { 
     string result = value; 
    } 

मेरे डाकिया डेटा: enter image description here

और हैडर: enter image description here

+1

है 'होने की GetToken जरूरत नहीं है ([FromBody] स्ट्रिंग उपयोगकर्ता नाम, [ से बॉडी] स्ट्रिंग पासवर्ड) '? या आप पूरे जेसन स्ट्रिंग को रखने के लिए 'value' की उम्मीद करते हैं? – Andrei

+0

मैं अपने डेटा को शरीर में जेसन स्ट्रिंग स्वरूपित के रूप में पास करना चाहता हूं। मेरे कोड में समस्या क्या है? – Mennan

उत्तर

8

वेबएपीआई है काम कर के रूप में उम्मीद, क्योंकि आप इसे कह रहे हैं कि आप इस json वस्तु भेज रहे हैं:

{ "username":"admin", "password":"admin" } 

तो फिर तुम पूछ रहे हैं इसे string के रूप में deserialize करने के लिए जो असंभव है क्योंकि यह एक वैध JSON स्ट्रिंग नहीं है।

समाधान 1:

आप value के मूल्य में के रूप में वास्तविक JSON प्राप्त करने के लिए किया जाएगा चाहते हैं:

value = "{ \"username\":\"admin\", \"password\":\"admin\" }" 

तो स्ट्रिंग आप में अनुरोध के शरीर निर्धारित करने की आवश्यकता डाकिया है:

"{ \"username\":\"admin\", \"password\":\"admin\" }" 

समाधान 2 (मैं इस संभालने हूँ जो आप चाहते हैं):

एक सी # ऑब्जेक्ट बनाएं जो JSON से मेल खाता है ताकि WebAPI इसे ठीक से deserialize कर सके।

सबसे पहले एक वर्ग है कि आपके JSON से मेल खाता बनाने के लिए: का उपयोग इस तरीके में तो

public class Credentials 
{ 
    [JsonProperty("username")] 
    public string Username { get; set; } 

    [JsonProperty("password")] 
    public string Password { get; set; } 
} 

:

[Route("api/account/GetToken/")] 
[System.Web.Http.HttpPost] 
public HttpResponseBody GetToken([FromBody] Credentials credentials) 
{ 
    string username = credentials.Username; 
    string password = credentials.Password; 
} 
3

आप एक वस्तु पोस्ट करना और किसी के लिए यह बाध्य करने के लिए कोशिश कर रहे हैं स्ट्रिंग। इसके बजाय, उस डेटा का प्रतिनिधित्व करने के लिए एक प्रकार बनाने:

public class Credentials 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
} 

[Route("api/account/GetToken/")] 
[System.Web.Http.HttpPost] 
public HttpResponseBody GetToken([FromBody] Credentials value) 
{ 
    string result = value.Username; 
} 
संबंधित मुद्दे