2017-05-04 10 views
0

私は$ http投稿でバックエンドにオブジェクトを送信しようとしていますが、パラメータの1つは常にnullです。新しいオブジェクトを保存するときと同じ方法でdtoをフォーマットしていますが、うまくいきますが、更新機能を呼び出そうとすると機能しません。私は何が欠けていますか?

vm.postUpdateITSM = function (itsm) { 
     $http({ 
      method: "POST", 
      url: "api/sources/" + itsm.Id, 
      data: { 
       id: itsm.Id, 
       dto: { 
        ConnectorType: itsm.Type, 
        SourceName: itsm.ServerName, 
        DisplayName: itsm.DisplayName, 
        Credentials: JSON.stringify(itsm.UserName, 
               itsm.Password), 
        Url: itsm.URL, 
        Settings: JSON.stringify(itsm.ResolveAlerts ? itsm.ResolveAlerts : false, 
              itsm.AcknowledgeAlerts ? itsm.AcknowledgeAlerts : false, 
              itsm.SyncInterval, 
              itsm.IncidentInterval, 
              itsm.Status ? itsm.Status : "") 
       } 
      } 
     }); 
    } 

とバックエンドで:

これは私のコントローラのコードで呼ばれたときDTOは常にnullです。

public async Task<IHttpActionResult> Update(int id, [FromBody] SourceDto dto) 
    { 
     var source = Mapper.Map<Source>(dto); 
     source.SourceID = id; 
     source.ServerCount = ""; 
     var res = await SystemActors.SourceManager.Ask(new UpdateSource(source)); 

     var failure = res as Status.Failure; 
     if (failure != null) 
     { 
      return InternalServerError(); 
     } 
     var success = ((SqlResult<object>) res).Success; 
     if (!success) 
     { 
      return Content(HttpStatusCode.BadRequest, "Failed to update source."); 
     } 

     return Ok(new ResponsePackage {Success = true}); 
    } 

そして、これがSourceDtoクラスです:

public class SourceDto 
{ 
    public string ConnectorType { get; set; } 
    public string SourceName { get; set; } 
    public string DisplayName { get; set; } 
    public string Credentials { get; set; } 
    public string Url { get; set; } 
    public string Settings { get; set; } 
} 
+0

どのパラメータがヌルですか?あなたのpostUpdateITSM機能またはネットワーク要求のデータを確認してください。あなたが期待している値を入力していることを確認してください。 – cnorthfield

答えて

0

あなたのフロントエンドのデータがビット間違ってフォーマットされている - dataパラメータが一つだけがあなたのASP.NETコントローラが[FromBody]に期待しているオブジェクトである必要があり、あなたのSourceDtoモデル - とidは、クエリ文字列でなければなりません:

method: "POST", 
     url: "api/sources/" + itsm.Id, 
     data: { 
       ConnectorType: itsm.Type, 
       SourceName: itsm.ServerName, 
       DisplayName: itsm.DisplayName, 
       Credentials: JSON.stringify(itsm.UserName, 
              itsm.Password), 
       Url: itsm.URL, 
       Settings: JSON.stringify(itsm.ResolveAlerts ? itsm.ResolveAlerts : false, 
             itsm.AcknowledgeAlerts ? itsm.AcknowledgeAlerts : false, 
             itsm.SyncInterval, 
             itsm.IncidentInterval, 
             itsm.Status ? itsm.Status : "") 
     } 
    }); 

ASP.NETが適用されます要求されたモデルにボディをリクエストする - 一致しない場合、取得するnull

+0

これは機能します。ありがとうございます。しかし、関数のパラメータであるため、IDがデータパラメータの内部にないと、そのIDがどのように渡されるのか分かりません。 – sdg91

+0

@ sdg91 - URL「URL:」を介して渡されます。「api/sources /」+ itsm.Id、「 – tymeJV

+0

」OPのデータパラメータは1つのオブジェクトです – cnorthfield