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 に答える