0

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

我还应该说这不会在本地发生。这仅在部署在客户端服务器上时发生。

4

1 回答 1

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>
于 2013-07-03T17:26:16.713 回答