我试图通过我的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);
}
答案 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);
});