将一长串 ID 传递到 Web API,而不将它们放入 URL
Pass a long list of ID's to Web API without putting them in the URL
我希望能够将一个长字符串(ID 列表)从我们的 Angular
前端传递到我们的 .NET Web API
。但是,有时这个字符串会超过 URL 字符限制,所以我不想通过 URL.
传递它
执行此操作的好方法是什么?
前端: 我首先想到通过 PUT's
HTTP Body
在 httpOptions
中发送字符串,但后来我意识到 [= =19=] 请求,我什至可能不需要 HTTP Body
- 我想我可以直接将数据传递到 PUT's
data
参数中。
PUT 请求
public put(apiPath, data): Observable<any>
{
var url = this.globals.getBaseUrl() + apiPath + "/" + data["ID"];
const httpOptions =
{
headers: new HttpHeaders({"Content-Type": "application/json"})
,withCredentials: true
};
return this.httpClient.put<any>(url, data, httpOptions)
.pipe(catchError(this.handleError));
}
。
.NET Web API: 然后,在 API 中,我将如何挖掘这个 data
我通过PUT
请求?我的游戏计划是为这个只有一个字段的控制器制作一个模型——ID 字符串。然后在控制器中,我将获取它、解析、定界并将其传递到我们的数据库。只是不确定如何在控制器中获取此 data
。
控制器:
// PUT: api/myApiPath/5
[ResponseType(typeof(void))]
public async Task<IHttpActionResult> Put_myTable(int id, _myTable _myTable)
{
db.Entry(_myTable).State = EntityState.Modified;
try
{
// ----- put -----
await db.SaveChangesAsync();
// ----- /put -----
}
else
{
error = "Unauthorized.";
throw new HttpResponseException(HttpStatusCode.Forbidden);
}
}
我正在使用 .net 核心,但我认为您只需要在后端参数上添加一个 [FromBody] 属性,如下所示。您从前端传入的任何对象都应该与您的后端期望的对象类型相匹配。因此,如果您在前端有一个简单的数字数组,您的后端将如下所示
[HttpPut]
public async Task<IHttpActionResult> Put_myTable([FromBody] List<int> ids)
{
}
我希望能够将一个长字符串(ID 列表)从我们的 Angular
前端传递到我们的 .NET Web API
。但是,有时这个字符串会超过 URL 字符限制,所以我不想通过 URL.
执行此操作的好方法是什么?
前端: 我首先想到通过 PUT's
HTTP Body
在 httpOptions
中发送字符串,但后来我意识到 [= =19=] 请求,我什至可能不需要 HTTP Body
- 我想我可以直接将数据传递到 PUT's
data
参数中。
PUT 请求
public put(apiPath, data): Observable<any>
{
var url = this.globals.getBaseUrl() + apiPath + "/" + data["ID"];
const httpOptions =
{
headers: new HttpHeaders({"Content-Type": "application/json"})
,withCredentials: true
};
return this.httpClient.put<any>(url, data, httpOptions)
.pipe(catchError(this.handleError));
}
。
.NET Web API: 然后,在 API 中,我将如何挖掘这个 data
我通过PUT
请求?我的游戏计划是为这个只有一个字段的控制器制作一个模型——ID 字符串。然后在控制器中,我将获取它、解析、定界并将其传递到我们的数据库。只是不确定如何在控制器中获取此 data
。
控制器:
// PUT: api/myApiPath/5
[ResponseType(typeof(void))]
public async Task<IHttpActionResult> Put_myTable(int id, _myTable _myTable)
{
db.Entry(_myTable).State = EntityState.Modified;
try
{
// ----- put -----
await db.SaveChangesAsync();
// ----- /put -----
}
else
{
error = "Unauthorized.";
throw new HttpResponseException(HttpStatusCode.Forbidden);
}
}
我正在使用 .net 核心,但我认为您只需要在后端参数上添加一个 [FromBody] 属性,如下所示。您从前端传入的任何对象都应该与您的后端期望的对象类型相匹配。因此,如果您在前端有一个简单的数字数组,您的后端将如下所示
[HttpPut]
public async Task<IHttpActionResult> Put_myTable([FromBody] List<int> ids)
{
}