我正在设计一个允许客户端POST(创建)资源的REST API。
让我的资源调用 public GetJobsListExcel(jobs: JobViewModel[]): Promise<Result> {
var JobIds: number[] = [];
var headers = new Headers();
headers.append('Content-Type', 'application/json')
jobs.forEach(x => JobIds.push(x.JobId));
return this.http.post(this.jobsUrl + "/jobs-list-excel",
{
jobIds: JobIds,
},
{
headers: headers
})
.toPromise()
.then(response => response.json() as Result);
}
,我的REST api接受名为Subscription
的Dto
POST请求需要与将在服务器端验证的验证码令牌一起发送。
我的问题是放置验证码令牌的最佳位置,还有一些我正在思考的选项:
Subscription
Subscription
并携带字段Subscription
欢迎任何其他建议。
谢谢。
答案 0 :(得分:1)
对于任何相关的身份验证或授权,我通常依赖于头或查询字符串参数。
一般情况下,我不想将有效负载与auth相关材料混合,也不喜欢将其封装起来。
将它放在HTTP标头中或作为查询字符串参数,可以为您提供良好的隔离。此外,由于它独立于请求体,因此您可以为每个API调用实现更广泛的身份验证控制,而不依赖于请求体的存在(对于GET请求来说非常重要,而GET请求无论如何都不应该携带请求体)。
答案 1 :(得分:1)
如果客户端可以修改/发送HTTP标头信息,则只使用HTTP标头。此方法不适用于标准浏览器。
您没有过滤资源,因此从REST角度来看,查询参数没有意义,并且您不希望将验证码答案作为查询参数发送。
通常,一个人将验证码信息(id,answer)与表格数据(有效载荷)一起提交。您通常还会在表单中显示验证码。
所以最后唯一有用的选择是将验证码信息作为有效载荷/表单数据的一部分发送。
如果您将数据放入Subscription DTO,则取决于您的设计/偏好。
我建议使用Subscription(Data)
和SubscriptionRequest
之类的内容,SubscriptionRequest
包含SubscriptionData
和Captha信息(capcha id and answer)< / p>