ここにこのwebapiメソッドがあります:
// PUT api/Competitions/5
public HttpResponseMessage PutCompetitor(int id, CompetitionViewModel competitorviewmodel)
{
...
}
CompetitionViewModel は次のようになります。
public class CompetitionViewModel
{
public int CompetitorId { get; set; }
public string Owned{ get; set; }
public bool Sold { get; set; }
}
次のような競合モデルを更新するための角度のある http.put 呼び出しがあります。
$scope.updateProject = function () {
$http.put(mvc.base + "API/Projects/" + masterScopeTracker.ProjectID, $scope.ProjectCRUD)
.success(function (result) {
})
.error(function (data, status, headers, config) {
masterScopeTracker.autoSaveFail;
});
}
ページの読み込み時に、新しい競合が作成されます。だから私は次のようなモデルを持っています:
{
CompetitorId: 56,
Owned: null,
Sold: false
}
モデルを更新するための呼び出しが 15 秒ごとに行われます。モデルの値を変更しなければ、webapi の put メソッドが呼び出され、問題なく正常に実行されます。モデルを次のように変更すると:
{
CompetitorId: 56,
Owned: "Value",
Sold: false
}
500 エラーが発生し、メソッドがヒットしません。ここで私が間違っていることを理解していません。ビュー モデルは文字列を受け入れます。ペイロードで文字列が送信されています。それでもエラーが発生します。誰にもアイデアはありますか?
アップデート:
サーバーに次のエラーを表示させることができました。
{"Message":"Anerrorhasoccurred.",
"ExceptionMessage":"Objectreferencenotsettoaninstanceofanobject.",
"ExceptionType":"System.NullReferenceException",
"StackTrace":"atClientVisit.Models.ClientVisitEntities.SaveChanges()\r\natClientVisit.Controllers.API.CompetitionsController.PutCompetitor(Int32id,CompetitionViewModelcompetitorviewmodel)\r\natlambda_method(Closure,Object,Object[])\r\natSystem.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass13.<GetExecutor>b__c(Objectinstance,Object[]methodParameters)\r\natSystem.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Objectinstance,Object[]arguments)\r\natSystem.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1func,CancellationTokencancellationToken)"
}
また、これはローカルでは発生しないと言わなければなりません。これは、クライアント サーバーに展開された場合にのみ発生します。