无法从angular 7应用程序将整数数组传递给asp.net webapi

时间:2019-07-08 10:20:19

标签: angular asp.net-web-api

我试图通过我的angular 7应用程序getDocumentUploadDetailsByIds方法将整数值数组传递到服务器webapi端点。由于某种原因,端点正在接收空值。我尝试了几种方法,但是端点的参数为null。有人可以告诉我我要去哪里哪里

组件

  export interface IDocumentIds {
    ids: number[];
    }

          documentIds: IDocumentIds = <IDocumentIds>{};


          this.documentUploadService.createDocumentUpload(this.documents)
                    .then((result) => {
                        if (result) {
                            this.documentIds.ids = Object.keys(result).map(k => result[k]);
                            console.log(this.documentIds);
                            this.getDocumentUploadDetailsByIds(this.documentIds);
                            this.setGridOptions();
                            this.setColumns();
                            this.notify.success('Documents uploaded Successfully');
                        }
                    }).catch(err => {
                        this.notify.error('An Error Has Occured While uploading the documents');
                    });

 public getDocumentUploadDetailsByIds(documentIds) {
        if (this.ManagerStrategyId != null) {
            this.Loading = true;

            this.initGrid();
            this.documentUploadService.getDocumentUploadDetailsByIds(documentIds)
            .then((data) => {
                if (data) {
                    this.DocumentUploadDetails = data;
                    this.Loading = false;
                    this.notify.success('Documents uploaded Successfully');
                }
            }).catch(err => {
                this.notify.error('An Error Has Occured While uploading the documents');
            });
        }
    }

服务

     getDocumentUploadDetailsByIds(documentIds: IDocumentIds) {
                    return this.mgr360CommonService.httpGetByKey('/api/documentupload/detailsByIds' ,  documentIds);
                  }      

const httpPostOptions = {

    headers:
        new HttpHeaders(
            {
                'Content-Type': 'application/json; charset=utf-8',
            }),

    withCredentials: true,
};

        httpGetByKey(url: string, key: any) {

            return this.httpClient.get(this.webApiLocation + url + '/' + key, httpPostOptions)
                .pipe(map((response: Response) => {
                    return response;
                }))
                .toPromise()
                .catch((error: any) => {
                    this.onError(error);
                    return Promise.reject(error);
                });
        }

asp.net Web API     模型

  public class DocumentIdViewModel
    {
       public int[] ids;
    }

端点

 [HttpGet]
            [Route("api/documentupload/detailsByIds/{id}")]
            public IHttpActionResult DetailsByIds(DocumentIdViewModel documentIds)
            {
                var viewModel = GetDocumentUploadDetailsByIds(documentIds);
                return Ok(viewModel);
            }

我也尝试将参数设置为Web方法的int数组

从角度

this.getDocumentUploadDetailsByIds(this.documentIds.ids);

在服务器上

 public IHttpActionResult DetailsByIds(int[] documentIds)
        {
            var viewModel = GetDocumentUploadDetailsByIds(documentIds);
            return Ok(viewModel);
        }

1 个答案:

答案 0 :(得分:0)

如果您要将ids传递给正文,请添加[FromBody]

[HttpPost]
public IHttpActionResult DetailsByIds([FromBody] int[] documentIds)
{
}

否则,如果您以URI发送ID:

[HttpPost]
public IHttpActionResult DetailsByIds([FromUri] int[] documentIds)
{
}

更新: 为了获得枚举参数,那么您应该创建以下查询字符串:

localhost:56888/api/documentupload/DetailsByIds?
    detailsByIds=123&detailsByIds124&detailsByIds125 

MSDN Parameter Binding in ASP.NET Web API

上有一篇很棒的关于参数的文章

您可以使用HttpParams类来创建参数。由于您的参数名称相同,因此可以创建一个循环。这是将URL参数传递给HTTP请求的一种方法:

import { HttpParams, HttpClient } from '@angular/common/http';

constructor(private http: HttpClient) { }

let params = new HttpParams();
params = params.append('var1', val1);
params = params.append('var2', val2);

this.http.get(StaticSettings.BASE_URL, {params: params}).subscribe(...);

Angular docs about passing parameters to HTTP requst.

更新1:

让我展示一个示例如何添加参数:

const array = [1, 2, 3, 4, 5];
let params = new HttpParams();
array.forEach(id => {
  params.append('detailsByIds', id);
});