我在这里有这个 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)"
}
我还应该说这不会在本地发生。这仅在部署在客户端服务器上时发生。