Я использую RestSharp, чтобы опубликовать объект для действия веб-API asp.net. Для формата JSON мои коды клиентской стороны работают нормально с серверной стороной , которая обеспечивает действие Post Web API. Для формата XML мои другие кодовые коды клиента не работают; отладка на стороне веб-интерфейса API, привязка объекта всегда равна нулю; входной параграф «analyticsLogs» получен как null для формата XML (см. коды ниже). Пожалуйста помоги.null объект получен на стороне сервера asp.net Действие веб-интерфейса с XML-форматом RestSharp
Следующая моя asp.net веб-действие POST API на стороне сервера:
[HttpPost]
public HttpResponseMessage PostAnalyticsLogs([FromBody] AnalyticsLogs analyticsLogs)
{
_logger.Info(analyticsLogs);
bool status = _analyticService.CreateAnalyticsLogs(analyticsLogs);
HttpResponseMessage response = new HttpResponseMessage();
if(status)
{
response = Request.CreateResponse<AnalyticsLogs>(HttpStatusCode.OK, analyticsLogs);
}
else
{
response = Request.CreateResponse<AnalyticsLogs>(HttpStatusCode.InternalServerError, analyticsLogs);
}
return response;
}
Клиентские коды для формата JSON хорошо работает:
private void buttonPostAnalyticsLogsDTO_Click(object sender, EventArgs e)
{
try
{
string pingMessage = string.Empty;
clearDataGridViewLinqToExcel();
if (!isWebAPISiteRunning(out pingMessage))
{
MessageBox.Show(pingMessage);
_logger.Error(pingMessage);
return;
}
// POST
AnalyticsLogs analyticsLogs = new AnalyticsLogs();
Analytics analytics = new Analytics();
analytics.Action = "Action test JSON";
analytics.Category = "Category test JSON";
analytics.Label = "Label test";
analytics.Value = 2147483647;
analytics.Timestamp = DateTime.Now;
analyticsLogs.Add(analytics);
// REST SHARP
var client = new RestClient(_webApiBaseUrl);
var request = new RestRequest();
request.Method = Method.POST;
request.RequestFormat = DataFormat.Json; // JSON ***************
request.Resource = "Analytic";
request.AddBody(analyticsLogs);
var response = client.Execute<AnalyticsLogs>(request);
if (response.ResponseStatus == ResponseStatus.Error)
{
_logger.Error(response.ErrorMessage);
MessageBox.Show(response.ErrorMessage);
return;
}
dataGridViewLocalDMSWebAPIForDataAggregator.DataSource = response.Data;
}
catch(Exception ex)
{
_logger.Error(ex);
MessageBox.Show(ex.Message);
}
}
Клиентские коды для XMLformat не работают:
private void buttonPostAnalyticsLogsDTO_XML_Click(object sender, EventArgs e)
{
try
{
string pingMessage = string.Empty;
clearDataGridViewLinqToExcel();
if (!isWebAPISiteRunning(out pingMessage))
{
MessageBox.Show(pingMessage);
_logger.Error(pingMessage);
return;
}
// POST
AnalyticsLogs analyticsLogs = new AnalyticsLogs();
Analytics analytics = new Analytics();
analytics.Action = "Action test XML";
analytics.Category = "Category test XML";
analytics.Label = "Label test";
analytics.Value = 47950494;
analytics.Timestamp = DateTime.Now;
analyticsLogs.Add(analytics);
// REST SHARP
var client = new RestClient(_webApiBaseUrl);
var request = new RestRequest();
request.Method = Method.POST;
request.RequestFormat = DataFormat.Xml; // XML *****************
request.Resource = "Analytic";
request.AddBody(analyticsLogs);
var response = client.Execute<AnalyticsLogs>(request);
if (response.ResponseStatus == ResponseStatus.Error)
{
_logger.Error(response.ErrorMessage);
MessageBox.Show(response.ErrorMessage);
return;
}
dataGridViewLocalDMSWebAPIForDataAggregator.DataSource = response.Data;
}
catch (Exception ex)
{
_logger.Error(ex);
MessageBox.Show(ex.Message);
}
}
Мои пользовательские DTO классы:
public class Analytics
{
public DateTime Timestamp { get; set; }
public long UserExpId { get; set; }
public string UserExpStatus { get; set; }
public string Category { get; set; }
public string Action { get; set; }
public string Label { get; set; }
public int Value { get; set; }
}
public class AnalyticsLogs : List<Analytics>
{
}
Отладка проблемы с кодами клиента XML дает мне некоторую информацию:
(new System.Collections.Generic.Mscorlib_CollectionDebugView<RestSharp.Parameter>(request.Parameters)).Items[0] :RequestBody
+ [0] {text/xml=<AnalyticsLogs>
<Analytics>
<Timestamp>9/9/2014 9:15:58 AM</Timestamp>
<UserExpId>0</UserExpId>
<Category>Category test XML</Category>
<Action>Action test XML</Action>
<Label>Label test</Label>
<Value>47950494</Value>
</Analytics>
</AnalyticsLogs>} RestSharp.Parameter
request.RootElement : null
, вероятно, попробуйте без поля 'datetime'. Если это сработает, то это связано с« проблемой сериализации даты »с' restsharp' –