- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 Angular 服务中,我使用 HttpParams 向服务发送字符串:
get(phone: string): Observable<PhoneSearchResponse> {
let params = new HttpParams();
params = params.append("phone", phone); // sending "+123456"
return this._http.get<PhoneSearchResponse>(`${this._apiurl}/Get`, { params: params });
}
当使用 +123456
作为参数调用 get() 时,我将在接收服务中获得 123456
。所以在某个地方 +
被转换为空格。
我是否需要对 HttpParams 进行转义以使它们在服务中保持不变?
如果重要的话,后端是一个 asp.net 核心项目。 Controller 中调用的代码:
[HttpGet("[action]")]
public async Task<JsonResult> Get(string phone) // receiving " 123456"
{
return Json(await PhoneSearchLogic.GetAsync(phone));
}
[更新] Noémi Salaun 的解释非常好 - 但我想知道更改参数是否是“设计”的预期行为?或者是 ASP.NET Core Controller 的问题,它不应该对 + 号(和其他符号)进行转义?
最佳答案
源码中可以看到common/http/src/params.ts , HttpParams
使用默认编码器 HttpUrlEncodingCodec
。
HttpUrlEncodingCodec
使用 native encodeURIComponent
函数,但随后取消编码一些符号以满足 RFC 规范( native JS 实现不遵循)。
所以如果你想保持你的 +
符号编码,你可以在使用 HttpParams
之前手动编码它,或者你可以覆盖 HttpParameterCodec
您自己的实现并通过 HttpParamOptions.encoder
属性传递它。
所有这些在现已弃用的 Http
服务中得到了更好的解释。使用它的 UrlSearchParams
和 QueryEncoder
。
源码中可以看到http/src/url_search_params.ts
By default,
QueryEncoder
encodes keys and values of parameters usingencodeURIComponent
, and then un-encodes certain characters that are allowed to be part of the query according to IETF RFC 3986: https://www.rfc-editor.org/rfc/rfc3986.These are the characters that are not encoded:
! $ \' ( ) * + , ; A 9 - . _ ~ ? /
If the set of allowed query characters is not acceptable for a particular backend,
QueryEncoder
can be subclassed and provided as the 2nd argument to URLSearchParams.
关于angular - 如何逃避 Angular HttpParams?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49438737/
我需要在我的 URL 中发送参数以从服务器获取过滤后的数据。 我是这样设置参数的 const queryParams = new HttpParams( { fromObj
我正在使用 angular 版本 11.2.1,我正在尝试发出一个 http 请求,一个带有参数和 header 的 Get 请求,问题是,当我对它们进行 console.log 时,它们都是空的,两
我正在使用 angular 版本 11.2.1,我正在尝试发出一个 http 请求,一个带有参数和 header 的 Get 请求,问题是,当我对它们进行 console.log 时,它们都是空的,两
我有一个方法发布到我的本地项目,我正在使用 HttpParams() 和 FormBuilder。到目前为止,这是我的代码: 表格: 组件.ts: search(post) { co
这个问题在这里已经有了答案: HttpClient.getParams() deprecated. What should I use instead? (1 个回答) 关闭 6 年前。 我从 co
我在表单控件中有一些类别,我将它们发送到一个字符串数组中,如下所示: [1,4,6] 这是我的实际代码: let categoryIds = new Array() this.selectedCate
以前我用过 import { Http, Response, Headers, URLSearchParams } from "@angular/http"; API 调用 getprojectsc
在 Angular 5 HttpClient 中,我可以通过这种方式设置 HttpParams()。 const body = new HttpParams() .set('email', '
我有非常简单的功能: createParams(paramsArray, withToken: boolean): HttpParams { let params = new HttpPara
有没有办法遍历 HttpParams 对象的所有条目? 其他人也有类似的问题 ( Print contents of HttpParams / HttpUriRequest? ),但答案并不奏效。 查
在 Angular 服务中,我使用 HttpParams 向服务发送字符串: get(phone: string): Observable { let params = new HttpPar
我有一个标准对象,它的一些属性可以为空,如果我什么都不做,查询字符串包括像 &p=undefined 这样的东西,这是不可取的,因为在 WebApi 中,这些是"null" 而不是 null所以在 A
我有一个HttpUriRequest例如,有没有办法打印它包含的所有参数?例如,我几乎可以得到它们: HttpUriRequest req = ...; HttpParams params = req
因此,从 http 迁移到 httpClient,我尝试使用 HttpParams 为我的获取请求设置参数...... 逻辑非常简单 const params = new HttpParams();
将项目从 Angular 7 迁移到 Angular 8 后,我遇到了 HttpParams 和 HttpHeaders 问题。当我调用 API 时,未添加参数。如果有人能帮助我解决这个问题,那就太好
第一次在这里问问题,而且是 android 编程的新手。我正在按照在线 youtube 教程创建用户“Tonikami TV”的登录名。除了 serverRequests 类之外,应用程序的一切都很好
有没有办法使用 HttpParams 和 fromObject 有条件地添加参数?我尝试在实例化 HttpParams 后添加条件参数,但这不起作用: const params = new HttpP
我正在使用带有 HttpInterceptors 的 Angular 5。 我已经知道我可以从 HttpParams via several methods 获得我想要的每个值. 此外 - 如果我想查
我正在尝试通过交换机将文件从本地发布到另一个平台。当我使用 DefaultHttpClient 执行此操作时,没有问题。 HttpParams params = new BasicHttpParams
HttpClient 或 HttpPost 等命令无法正常工作。谁能帮帮我? @Override protected users doInBackground(Void... params)
我是一名优秀的程序员,十分优秀!