【问题标题】:Null parameter using $http.post , AngularJS使用 $http.post 的空参数,AngularJS
【发布时间】:2015-02-25 09:31:24
【问题描述】:

我得到一个“id”的空参数。 如果我不 JSON.Stringify id 我得到 JSON 原始错误。

$scope.deleteSite = function (id) {
    $http.post(ROOT + 'SiteList/Delete/', JSON.stringify(id)) //null id
    //$http.post(ROOT + 'SiteList/Delete/', id) //Invalid JSON primitive: 5f6d794f-bf13-4480-9afd-3b10d7b6ae32.
        .success(function (result) {
            // log to console?
        }).
        error(function (data, status, headers, config) {
            // log to console?
        });

这是我的 siteList 删除控制器。

public JsonResult Delete(String id)
    {
        try
        {
            var convertedID = new Guid(id);
            _siteService.Delete(convertedID); 
            return Json("OK", JsonRequestBehavior.AllowGet);
        }
        catch (Exception e)
        {
            return Json("Error" + e.Message);
        }

    }

【问题讨论】:

  • 我摆弄了一个 MVC 项目,答案如下。

标签: c# json angularjs


【解决方案1】:

注意,您也可以使用angular.toJson。我认为这可能会更好 - 但如果您愿意,可以查看实现差异。

这是网络接口吗?

网络接口:

你必须配置参数,因为删除是这样工作的。

$scope.deleteSite = function (id) {
  $http.delete(ROOT + 'SiteList', { params: { id: id }}) 
    .success(function (result) {
      // log to console?
    }).
    error(function (data, status, headers, config) {
      // log to console?
    });
}

需要控制器操作,[FromUri],因为您配置了参数:

public JsonResult Delete([FromUri] Guid id)
{
  try
  {
    _siteService.Delete(id); 
    return Json("OK", JsonRequestBehavior.AllowGet);
  }
  catch (Exception e)
  {
    return Json("Error" + e.Message);
  }

}

未配置的参数意味着:

$scope.deleteSite = function (id) {
  $http.delete(ROOT + 'SiteList/' + id ) 
    .success(function (result) {
      // log to console?
    }).
    error(function (data, status, headers, config) {
      // log to console?
    });
}

控制器动作:

public JsonResult Delete(Guid id)
{
  try
  {
    _siteService.Delete(id); 
    return Json("OK", JsonRequestBehavior.AllowGet);
  }
  catch (Exception e)
  {
    return Json("Error" + e.Message);
  }

}

如果这不是 Web Api,那么你只需要从请求数据中创建一个对象。

MVC

$scope.deleteSite = function (id) {
  $http.post(ROOT + 'SiteList/Delete/', { id: id})
    .success(function (result) {
      // log to console?
    }).
    error(function (data, status, headers, config) {
      // log to console?
    });
}

控制器动作:

public JsonResult Delete(Guid id)
{
  try
  {
    _siteService.Delete(id); 
    return Json("OK", JsonRequestBehavior.AllowGet);
  }
  catch (Exception e)
  {
    return Json("Error" + e.Message);
  }

}

【讨论】:

  • 感谢 Callum,我使用的是 MVC,所以我只需要从数据中创建一个对象。
  • @EricColgan 好的,很酷。请记住说明您正在使用的所有技术,因为这样更容易回答:P
猜你喜欢
  • 1970-01-01
  • 2015-08-16
  • 2016-05-05
  • 2014-09-11
  • 2014-03-21
  • 1970-01-01
  • 2016-02-23
  • 2013-10-15
  • 2015-02-12
相关资源
最近更新 更多