2016-11-18 6 views
0

クライアント(Xamarin.Forms PCL)呼び出しがnullを返す理由を説明できますか?InvokeApiAsync <HttpResponseMessage>がnullを返します

HttpResponseMessage response = await OfflineSyncStoreManager.Instance.MobileAppClient.InvokeApiAsync<HttpResponseMessage>("ResetTruckAuftragWorkflow"); 

応答ヌルあります。コンソールアプリケーションでそれを実行すると、 有効なhttp応答が返されます。

最新の安定したZUMOナゲットをクライアントとバックエンドに使用します。私ZUMOのバックエンドのコードがあります:

[Authorize] 
[MobileAppController] 
public class ResetTruckAuftragWorkflowController : ApiController 
{ 
    private readonly RcsMobileContext _rcsMobileContext; 
    private readonly TruckFahrerInfo _truckFahrerInfo; 


    public ResetTruckAuftragWorkflowController() 
    { 
     _rcsMobileContext = new RcsMobileContext(); 
     _truckFahrerInfo = new TruckFahrerInfo(this.User as ClaimsPrincipal); 
    } 

    // POST api/ResetTruckAuftragWorkflow 
    [HttpPost] 
    public async Task<IHttpActionResult> PostAsync() 
    { 
     if (ModelState.IsValid) 
     { 
      using (var transaction = _rcsMobileContext.Database.BeginTransaction()) 
      { 
       try 
       { 
        var truckAuftragList = _rcsMobileContext.TruckAuftrags.PerUserFilter(_truckFahrerInfo.FahrerId); 
        var truckAppIds = truckAuftragList?.Select(ta => ta.TruckAppId).ToArray(); 

        if (truckAppIds != null) 
        { 
         foreach (var truckAppId in truckAppIds) 
         { 
          await _rcsMobileContext.Database.ExecuteSqlCommandAsync(_tawQueryTaskStatus10, truckAppId); 
          await _rcsMobileContext.Database.ExecuteSqlCommandAsync(_tawQueryTaskStatus5, truckAppId); 
          await _rcsMobileContext.Database.ExecuteSqlCommandAsync(_talQuery, truckAppId); 
          await _rcsMobileContext.Database.ExecuteSqlCommandAsync(_taQuery, truckAppId); 
         } 
        } 

        await _rcsMobileContext.Database.ExecuteSqlCommandAsync(_taQuery, _truckFahrerInfo.FahrerId); 

        transaction.Commit(); 
       } 
       catch (Exception e) 
       { 
        transaction.Rollback(); 
        return BadRequest($"Transaction failed: {e}"); 
       } 
      } 

      return Ok(); 
     } 
     else 
     { 
      return BadRequest(ModelState); 
     } 
    } 

    protected override void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      _rcsMobileContext.Dispose(); 
     } 

     base.Dispose(disposing); 
    } 
} 

おかげ

エリック

答えて

0

InvokeApiAsyncあなたは、この目的のためにHttpResponseMessageを使用してはならないタイプのT.にJSONを返され、デシリアライズされたボディをデコードシリアライズ可能ではありません。

本文を気にしない場合は、非汎用形式のInvokeApiAsyncを使用してください。

+0

それでも、応答はnullです: 'var response = await OfflineSyncStoreManager.Instance.MobileAppClient.InvokeApiAsync(" ResetTruckAuftragWorkflow ");' –

+0

カスタムAPIの応答を確認してください。ボディが返されない場合は、デコード時にnullが返されます。 –

+0

特に、次の行は 'return Ok();'はヌルオブジェクトに変換されるヌルボディを返します。 –

関連する問題