2017-10-24 15 views
0

이전에 Response.AsJson (Foo.bar())을 사용했을 때 API 끝점과 내부 논리 비동기 중 하나를 만들었습니다. JSON 표현 일반적으로,하지만 지금이 그것을 추가 참조 :Nancy.Response.AsJson에서 Task json 속성을 제거하는 방법

{ 
    "result": [ 
     { 
      "id": "59d680cc734d1d08b4e6c89c", 
      "properties": { 
       "name": "value" 
      } 
     } 
    ], 
    "id": 3, 
    "exception": null, 
    "status": 5, 
    "isCanceled": false, 
    "isCompleted": true, 
    "isCompletedSuccessfully": true, 
    "creationOptions": 0, 
    "asyncState": null, 
    "isFaulted": false 
} 

하지만 그것은 다음과 같이되고 싶어 : 나는 내 객체를 포장했기 때문에

"id": "59d680cc734d1d08b4e6c89c", 
     "properties": { 
      "name": "value" 
     } 

내가 알고있는 것처럼, 그건 작업,하지만 난 알아낼 수 없다, 어떻게 Response.AsJson을 사용하여 낸시 프레임 워크와 함께, 속성이 제외되도록 ded. 나는 분명히 반환 된 객체의 Response.AsJson을 생략 할 수 있지만 예를 들어 웹 브라우저를 통해 요청할 경우 응답은 더 이상 Json이 아닙니다. 라우팅 API에 대한 또 다른 예를 들어

NancyModule는 :

public ItemCatalogModule(IItemCatalog itemCatalog) : base("/itemCatalog") 
    {  
     Get("/fetch/{id}", async parameters => 
     { 
      var id = (string) parameters.id; 
      var response = await Response.AsJson(itemCatalog.GetItem(id)); 
      return response; 

     }); 
    } 

인터페이스는 같은 ItemCatalog의 보이는 방법 :

public interface IItemCatalog 
{ 
    Task<Item> GetItem(string id); 
} 

답변

2

당신은이 작업을 수행 갈까요 :

public ItemCatalogModule(IItemCatalog itemCatalog) : base("/itemCatalog") 
{  
    Get("/fetch/{id}", async parameters => 
    { 
     var id = (string) parameters.id; 
     return Response.AsJson(await itemCatalog.GetItem(id)); 

    }); 
} 
+0

감사합니다 , 그것은 일했다! 그러나 구문을 기다리는 위치가 다른 결과를주는 이유를 자세히 설명해 주시겠습니까? 이것은 C# 비동기 규칙 또는 nancyfx 프레임 워크에 특정한 것입니까? –

+1

'await'은 결과를 기다린 다음 메서드에 의해 반환되는 Task를 반환하는 대신 Json으로 리턴합니다. –