भेजते समय AspNet WebApi POST पैरामीटर शून्य है, मूल रूप से बीटा बिट्स का उपयोग करके एक वेब एपीआई सेवा है जिसे मैंने रिलीज़ उम्मीदवार बिट्स का उपयोग करके पुनर्निर्मित किया है और अब मुझे यह समस्या है।एक्सपी
मेरे पास एक पोस्ट कार्रवाई है जो एकमात्र पैरामीटर के रूप में जटिल विकल्प लेती है। जब मैं जेसन प्रारूप में शरीर के साथ अनुरोध भेजता हूं तो ऑब्जेक्ट अपेक्षित के रूप में deserialised है, लेकिन अगर मैं एक्सएमएल भेजता हूं तो पैरामीटर शून्य है।
बीटा मैं मॉडल कार्लोस Figueira के ब्लॉग पोस्ट Disabling model binding on ASP.NET Web APIs Beta
आर सी लेकिन वे IRequestContentReadPolicy है कि इस विधि को लागू किया गया था निकाल दिया है में में वर्णित के रूप बंधन को अक्षम करके इस के आसपास काम किया है।
मेरे कार्रवाई:
public List<Models.Payload> Post([FromBody]Models.AimiRequest requestValues)
{
try
{
if (requestValues == null)
{
var errorResponse = new HttpResponseMessage();
errorResponse.StatusCode = HttpStatusCode.NotFound;
errorResponse.Content = new StringContent("parameter 'request' is null");
throw new HttpResponseException(errorResponse);
}
var metadataParams = new List<KeyValuePair<string, string>>();
foreach (Models.MetadataQueryParameter param in requestValues.Metadata)
{
metadataParams.Add(new KeyValuePair<string, string>(param.Name, param.Value));
}
List<Core.Data.Payload> data = _payloadService.FindPayloads(metadataParams, requestValues.ContentType, requestValues.RuleTypes);
var retVal = AutoMapper.Mapper.Map<List<Core.Data.Payload>, List<Models.Payload>>(data);
return retVal; // new HttpResponseMessage<List<Models.Payload>>(retVal);
}
catch (System.Exception ex)
{
_logger.RaiseError(ex);
throw;
}
}
मेरे मॉडल:
public class AimiRequest
{
public MetadataQueryParameter[] Metadata { get; set; }
public string ContentType { get; set; }
public string RuleTypes { get; set; }
}
public class MetadataQueryParameter
{
public string Name { get; set; }
public string Value { get; set; }
}
मैं सेवा के लिए अनुरोध भेजने के लिए फ़िडलर का उपयोग कर परीक्षण कर रहा हूँ।
यह काम करता है और मुझे अपेक्षित परिणाम देता है।
POST http://localhost:51657/api/search HTTP/1.1
User-Agent: Fiddler
Content-Type: application/json; charset=utf-8
Accept: application/json
Host: localhost:51657
Content-Length: 219
{
"ContentType":null,
"RuleTypes":null,
"Metadata":[
{
"Name":"ClientName",
"Value":"Client One"
},
{
"Name":"ClientName",
"Value":"Client Two"
}
]
}
यह विफल रहता है क्योंकि requestValues पैरामीटर अशक्त
POST http://localhost:51657/api/search HTTP/1.1
User-Agent: Fiddler
Content-Type: application/xml; charset=utf-8
Accept: application/xml
Host: localhost:51657
Content-Length: 213
<AimiRequest>
<ContentType />
<RuleTypes />
<Metadata>
<MetadataQueryParameter>
<Name>ClientName</Name>
<Value>Client One</Value>
</MetadataQueryParameter>
<MetadataQueryParameter>
<Name>ClientName</Name>
<Value>Client Two</Value>
</MetadataQueryParameter>
</Metadata>
</AimiRequest>
में इस [सवाल] विवरण देखें [1] ... [1]: http://stackoverflow.com/प्रश्न/14068288/मॉडल-हमेशा-नल-ऑन-एक्सएमएल-पोस्ट – barrypicker