将一长列ID传递到Web API,而不将其放在URL中

问题描述 投票:0回答:1

我希望能够从我们的Angular前端向我们的.NET Web API传递一个长字符串(ID列表)。但是,有时此字符串超出了URL字符数限制,因此我不想通过URL传递它。

什么是这样做的好方法?

前端:我首先想到了通过PUT's中的HTTP Body httpOptions发送字符串,但是后来我意识到了PUT请求,我什至不需要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

Controller:

] >>
// 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);
        }

}

我希望能够从Angular前端向我们的.NET Web API传递一个长字符串(ID列表)。但是,有时此字符串超出URL字符限制,因此我不想通过...

angular rest asp.net-web-api get put
1个回答
0
投票

我使用的是.net core,但我认为您只需要在后端参数上使用[FromBody]属性,如下所示。您从前端传入的任何对象都应与后端期望的对象类型相匹配。因此,如果您在前端有一个简单的数字数组,那么您的后端将如下所示

[HttpPut]
public async Task<IHttpActionResult> Put_myTable([FromBody] List<int> ids)
{
}
© www.soinside.com 2019 - 2024. All rights reserved.