我在这里有这个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)"
}
我还应该说,这不会发生在本地。只有在客户端服务器上部署时才会发生这种情况。
答案 0 :(得分:0)
您应该检查事件日志以查看服务器端的实际错误。因为启用了WebDAV,所以在使用Put之前我遇到了IIS / IIS Express的问题。您可以在web.config中禁用它:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>