2016-12-19 5 views
0

Использование https://github.com/scott-mcdonald/JsonApiFramework рамкине удается получить соответствующий ресурс, используя JsonApiFramework

Я посылаю следующий ЗАПЛАТУ из моего пользовательского интерфейса:

{"data":{"id":"4221fe2f-ca7b-425d-b45a-a09f4936a22b","attributes":{"contact-trade-name":"asdad","contact-name":"aasd","contact-phone":"asdad","contact-email":"[email protected]","created-date":"2016-12-19T14:07:59.833","status":"AwaitingBillData"},"relationships":{"share-user":{"data":{"type":"users","id":"5078b2ee-2348-44f5-95a0-3c14c2ad2b1d"}}},"type":"jobs"}}

И на моем сервере я делаю следующее:

using (var documentContext = new DocumentContext(HttpContext.Current.Request.Url, document)) { var job = documentContext.GetResource<Job>(); var relationships = documentContext.GetResourceRelationships(job); var shareUserRel = relationships["share-user"]; var shareUser = documentContext.GetRelatedResource<Data.ServiceModel.User>(shareUserRel); }

однако shareUser всегда null

shareUserRel имеет следующий, когда я проверить его:

{ResourceIdentifier [type=users id=5078b2ee-2348-44f5-95a0-3c14c2ad2b1d]}

, если это помогает.

Есть ли что-то очевидное, что я могу ошибаться?

ответ

1

Для форматирования JSON: апите документ для удобства чтения, он выглядит следующим образом:

{ 
    "data": { 
    "type": "jobs" 
    "id": "4221fe2f-ca7b-425d-b45a-a09f4936a22b", 
    "attributes": { 
     "contact-trade-name": "asdad", 
     "contact-name": "aasd", 
     "contact-phone": "asdad", 
     "contact-email": "[email protected]", 
     "created-date": "2016-12-19T14:07:59.833", 
     "status": "AwaitingBillData" 
    }, 
    "relationships": { 
     "share-user": { 
     "data": { 
      "type": "users", 
      "id": "5078b2ee-2348-44f5-95a0-3c14c2ad2b1d" 
     } 
     } 
    } 
    } 
} 

Причина GetRelatedResource возвращается null это вы задаете контекст документа вернуть фактическую включенную ресурс пользователя в документе, который в документе не существует.

Когда клиент отправляет этот тип документа json: api в PATCH, вы поручаете серверу обновить ресурс задания с указанными атрибутами и связать этот ресурс задания с существующим ресурсом пользователя, который указан во взаимном ресурсная связь.

что-то более правильно, как только у вас есть объект отношения в вашем примере является следующее:

if (shareUserRel.IsResourceLinkageNullOrEmpty()) 
{ 
    // Clear any linkage between the job resource and any current user 
    ... 
} 
else 
{ 
    var shareUserResourceIdentifier = shareUserRel.GetToOneResourceLinkage(); 
    // Create linkage between the job resource and existing user identified 
    // by shareUserResourceIdentifier 
    ... 
} 

Теперь, как вы справиться с «...» зависит от уровня данных.

+0

Спасибо @scott - на точке, как всегда :) – iwayneo