Angular WebAPI POST 服务调用替换了请求正文中的“+”字符
Angular WebAPI POST service call replaces '+' char in request body
我正在从 Angular 对 .Net WebAPI 进行 POST 调用,这在大多数情况下都有效,但在传递包含“+”号作为尾随字符的请求参数时会导致问题。
在使用 Newtonsoft.Json 进行序列化的 .Net WebAPI 服务中,当接收到请求末尾缺少“+”的请求对象时。
我的Angular代码:
const body = new HttpParams().set('UserID', 'James').set('Password', 'Bond+');<br>
this.http.post(API_URLS.UserAuthentication, body.toString(),{ headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded') }
在我看来,Angular 或 .Net 没有问题,但我可能遗漏了一些东西。
您可以使用encodeURIComponent
方法对密码值进行编码。因此,您将在 HttpParams
对象中设置密码,如下所示:
const body = new HttpParams().set('UserID', 'James').set('Password', encodeURIComponent('Bond+'));
现在,当您在 .Net API 中获得 Password
的值时,它应该类似于 'Bond%2B',您可以使用 System.Web.HttpUtility.UrlDecode()
我正在从 Angular 对 .Net WebAPI 进行 POST 调用,这在大多数情况下都有效,但在传递包含“+”号作为尾随字符的请求参数时会导致问题。 在使用 Newtonsoft.Json 进行序列化的 .Net WebAPI 服务中,当接收到请求末尾缺少“+”的请求对象时。
我的Angular代码:
const body = new HttpParams().set('UserID', 'James').set('Password', 'Bond+');<br>
this.http.post(API_URLS.UserAuthentication, body.toString(),{ headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded') }
在我看来,Angular 或 .Net 没有问题,但我可能遗漏了一些东西。
您可以使用encodeURIComponent
方法对密码值进行编码。因此,您将在 HttpParams
对象中设置密码,如下所示:
const body = new HttpParams().set('UserID', 'James').set('Password', encodeURIComponent('Bond+'));
现在,当您在 .Net API 中获得 Password
的值时,它应该类似于 'Bond%2B',您可以使用 System.Web.HttpUtility.UrlDecode()