当模型字符串与webapi具有值时,PUT方法错误输出

时间:2013-07-03 17:11:31

标签: angularjs ajax viewmodel put

我在这里有这个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)"
}

我还应该说,这不会发生在本地。只有在客户端服务器上部署时才会发生这种情况。

1 个答案:

答案 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>