ODataActionParameters всегда пуст при публикации несвязанного сложного объекта - PullRequest
0 голосов
/ 10 мая 2019

У меня есть рабочее 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"
            }
        ]
    }
}
...