Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 当webapi中的模型字符串具有值时,将方法错误输出_Angularjs_Ajax_Viewmodel_Put - Fatal编程技术网

Angularjs 当webapi中的模型字符串具有值时,将方法错误输出

Angularjs 当webapi中的模型字符串具有值时,将方法错误输出,angularjs,ajax,viewmodel,put,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; }

我这里有一个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; }
}
$scope.updateProject = function () {
    $http.put(mvc.base + "API/Projects/" + masterScopeTracker.ProjectID, $scope.ProjectCRUD)
        .success(function (result) {
        })
        .error(function (data, status, headers, config) {
            masterScopeTracker.autoSaveFail;
        });
}
我有一个angular http.put调用来更新竞争模型,如下所示:

public class CompetitionViewModel
{
    public int CompetitorId { get; set; }
    public string Owned{ get; set; }
    public bool Sold { get; set; }
}
$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)"
}
{“消息”:“错误发生。”,
“例外消息”:“ObjectReferenceNotSetToAnInstanceFanObject.”,
“ExceptionType”:“System.NullReferenceException”,
“StackTrace”:“AtClientVisite.Models.ClientVisities.SaveChanges()\r\nClientVisite.Controllers.API.CompetitionController.PutCompetitor(Int32id,CompetitionViewModelcompetitorviewmodel)\r\nLambda_方法(闭包,对象,对象[])\r\natSystem.Web.Http.Controllers.ReflectedHttActionDescriptor.ActionExecutor.c_u显示类13.b_uC”(Objectinstance,Object[]methodParameters)\r\nAsystem.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Objectinstance,Object[]参数)\r\nAsystem.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1func,CancellationTokencancellationToken)
}

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

您应该检查事件日志,查看服务器端的实际错误。我以前在使用Put时遇到过IIS/IIS Express问题,因为启用了WebDAV。您可以在web.config中禁用它:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>


通过谷歌搜索等方式,我已经在web配置中尝试了webdav设置。我正在尝试查找服务器事件日志,但遇到了问题。客户端的计算机已被锁定。另一个导致我得出webdav结论的原因是,您没有看到控制器上的Put方法受到攻击。另一个需要检查的问题是您正在使用的路由和参数名称。如果您没有使用“id”,您可能需要添加一个新路由来处理它。我能够让服务器向我发送一个更具描述性的错误。也许您有其他输入?啊,我看到您用错误更新了问题。看起来您的数据模型中有问题需要解决。Null异常表示您试图使用的对象为Null或尚未初始化(或两者都未初始化)。结果表明,我们在系统中实现的错误日志记录使put方法需要更长的时间才能完成。这最终会导致错误,因为发送的信息将不再填充。我们花了很长的时间才弄清楚这一点;