【问题标题】:How to pass Array of Objects from Angular Front-end to C# Back-end如何将对象数组从 Angular 前端传递到 C# 后端
【发布时间】:2016-04-29 13:50:43
【问题描述】:

我在 Angular 中生成了一个对象数组,我希望它能够将它发送到 C# 控制器。我该怎么做?

这是生成对象数组的代码。

var addObjectToArray = function (id, price, quantity, tax) {
  $scope.element = {
    prodId: id,
    patientId: $state.params.patientId,
    clinicId: $cookies.get("clinicId"),
    user: authService.authentication.userName,
    price: price,
    quantity: quantity,
    tax: tax,
    subtotal: price * quantity,
    total: price * quantity + tax
  };
  $scope.productsArray.push({ product: $scope.element });
}

这是 C# 控制器。如何将对象数组作为 C# 控制器中的第二个参数传递?

[HttpPost]
[Route("... the route ...")]
[ResponseType(typeof(int))]
public IHttpActionResult InsertNewProductTotal(int clinicId) // << HOW CAN I GET THE ARRAY OF OBJECTS HERE ??? >>
{
    var newAttorney = _productSaleLogic.InsertNewProductTotal(clinicId, productsList);
    return Created(Request.RequestUri.ToString(), newAttorney);
}

感谢您的帮助!

【问题讨论】:

  • 创建一个 ViewModel(类),它将包含一个 Id 属性和集合(IEnumerable 类型)属性

标签: c# arrays angularjs asp.net-web-api controller


【解决方案1】:

假设您的 Route 包含 ClinicId,方式类似于:

[Route("{clinicId:int}")]

然后您需要使用正确的类型向控制器操作添加参数:

public IHttpActionResult InsertNewProductTotal(int clinicId, [HttpPost] Product[] productsList)
{
    var newAttorney = _productSaleLogic.InsertNewProductTotal(clinicId, productsList);
    return Created(Request.RequestUri.ToString(), newAttorney);
}

Product 是一个代表您的 javascript 对象的类:

public class Product {
    public int prodId {get; set;}
    public int patientId {get; set;}
    //etc.
}

在您的角度控制器中,您必须使用 $http 服务将对象数组发布到您的 api 端点:

$http.post("http://myapihost/myapiPath/" + clinicId, $scope.productsArray)
    .then(function (response) {
        //ok! do something
    }, function (error) {
        //handle error
    });

当然,如果您没有将clinicId 参数放在您的Route 属性中,那么您应该为您的$http.post 使用以下URI:"http://myapihost/myapiPath?clinicId=" + clinicId

【讨论】:

    【解决方案2】:
    [HttpPost]
    [Route("api/products/{clinicId}")]
    
    public IHttpActionResult InsertNewProductTotal(int clinicId,[FromBody]Product[]) // << HOW CAN I GET THE ARRAY OF OBJECTS HERE ??? >>
    {
        var newAttorney = _productSaleLogic.InsertNewProductTotal(clinicId, productsList);
        return Created(Request.RequestUri.ToString(), newAttorney);
    }
    

    然后从角度你可以做这样的事情

    $http.post("http://api/products/" + clinicId, $scope.productsArray)
        .then(function (response) {
            //ok! do something
        }, function (error) {
            //handle error
        })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 2021-07-05
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 2022-10-18
      相关资源
      最近更新 更多