У меня есть рабочее UNBOUND
OData
действие с именем "CreateShakeoutDocument", которое возвращает действительное значение Complex Object
с именем ShakeoutDocument. Я пытаюсь реализовать смежный «SaveShakeoutDocument» как действие UNBOUND
.
Полезная нагрузка должна выглядеть следующим образом: { document: { ...the Json of the Document... }}
ПРОБЛЕМА
Проблема в том, что ... при выполнении различных комбинаций я либо получаю NULL ODataActionParameters
, либо я получаю ПУСТОЙ.
- Я пытался использовать HttpClient ... безуспешно
- Я пытался использовать Почтальон ... безуспешно
МОДЕЛЬ EDM: "SaveShakeoutDocument" :
Очень стандартный ...
var saveShakeoutDocument = modelBuilder.Action("SaveShakeoutDocument").ReturnsFromEntitySet<ShakeoutDocument>("ShakeoutDocument");
saveShakeoutDocument.Parameter<ShakeoutDocument>("document");
ДЕЙСТВИЕ ODATA: "SaveShakeoutDocument" :
Очень стандартный ...
[HttpPost]
[ODataRoute("SaveShakeoutDocument")]
public IHttpActionResult SaveDocument(ODataActionParameters parameters)
{
// Doing awesome stuff here...
}
ИСПОЛЬЗОВАНИЕ HTTP-КЛИЕНТА: "SaveShakeoutDocument" :
Передана переменная "document" ...
using (var handler = new HttpClientHandler { Credentials = new NetworkCredential(username, password) })
using (var client = new HttpClient(handler))
{
var action = "SaveShakeoutDocument";
var URL = string.Format("{0}{1}", BASE_URL, action);
try
{
// Form Data - THIS FAILS: ODataActionParameters = NULL
var jsonObject = JsonConvert.SerializeObject(document);
var data = "{document: " + jsonObject + "}";
var payload = new StringContent(data, Encoding.UTF8, "application/json");
payload.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var httpResponse = client.PostAsync(URL, payload).Result;
var json = await httpResponse.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
Console.WriteLine("FAILURE: SaveShakeoutDocumentAsync (async)");
throw;
}
}
ИСПОЛЬЗОВАНИЕ POSTMAN: "SaveShakeoutDocument" :
Странно то, что ... я отправляю обратно ТОЧНО ЖЕ Json, который я получаю от метода "CreateShakeoutDocument".
- Это приводит к пустым ODataActionParameters
Headers ...
- Тип содержимого: application / json
Сырое тело выглядит как ...
- {document: {... Json of Document ...}}
Хотя вам не нужно понимать или отвечать на вопрос, документ JSON выглядит так ...
{
"@odata.context": "http://localhost:50806/$metadata#ShakeoutDocument/$entity",
"DocumentTypeId": 1,
"GlobalId": "e8c9d71d-2773-e911-b71a-8cdcd4471a95",
"ParentId": null,
"AuthorId": 1,
"PublisherId": null,
"RevisionNumber": 0,
"PublishedDate": null,
"IsActive": true,
"Id": 44,
"CreateUserId": "domain\\lanid",
"CreateDate": "2019-05-10T08:25:46.31-05:00",
"UpdateUserId": "domain\\lanid",
"UpdateDate": "2019-05-10T08:25:46.31-05:00",
"ShakeoutId": 44,
"SchedulingBatch": null,
"ProductId": null,
"Gravity": null,
"Temperature": null,
"SedimentAndWater": null,
"BatchEndDate": null,
"SampleWorkedDate": null,
"Witness": null,
"Notes": null,
"Seals": [],
"Details": [],
"ObjectState": {
"@odata.type": "#StateManagement.ShakeoutDocument.New",
"Name": "New",
"Events": [
{
"@odata.type": "#StateManagement.ShakeoutDocument.IsNew",
"Name": "IsNew"
}
]
}
}