将一长串 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 BodyhttpOptions 中发送字符串,但后来我意识到 [= =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)
{
}