有多少种不同的方法可以通过HTTPGET传递参数
本文关键字:HTTPGET 可以通过 参数 方法 多少 | 更新日期: 2023-09-27 18:25:48
通常,如果我使用HTTPClient并发出GetAsync(URI)或类似命令,如果我想传递一些参数,如"int id,string name,stringdivision",我需要将它们附加到URI:"http://localhost/webapplication/api/controller/action/id"
他们有没有替代这种传递参数的标准方法,从而使信息在uri中不正确?
像HTTPClient.MessageParameters = myOBject
这样的东西放在消息正文中,然后我可以在另一边打开包装?
如果没有其他选择,那么使用POST隐藏参数是一种可以接受的方式吗?
感谢
使用POST是隐藏这些参数的公认方法,如果执行请求有副作用,那么它们肯定应该在POST请求中提交。GET请求可能会被代理或其他地方缓存,这可能会给您带来问题。我认为理论上你可以尝试更改请求头,但如果它们是非标准的,不能保证服务器不会丢弃它们,所以你不应该考虑这个选项。
编辑:有关X-headers(非标准HTTP标头)以及是否可以安全使用它们的更多信息,请参阅此问题。现在看来他们已经被弃用了。
您至少有两个选项:
- 添加包含数据的自定义http头
例如。
X-Var-Count: 3
X-Var-Name-1: id
X-Var-Value-1: <value_of_id>
X-Var-Name-2: name
X-Var-Value-2: <value_of_name>
X-Var-Name-3: division
X-Var-Value-3: <value_of_division>
显然,这需要额外的服务器端处理。
- 切换到POST请求
我会使用POST。
通过GET传递的任何参数都可以由代理捕获和记录,也可以缓存在服务器日志中。
HttpWebRequest httpWReq =
(HttpWebRequest)WebRequest.Create("http://domain.com/page.aspx");
ASCIIEncoding encoding = new ASCIIEncoding();
string postData = "username=user";
postData += "&password=pass";
byte[] data = encoding.GetBytes(postData);
httpWReq.Method = "POST";
httpWReq.ContentType = "application/x-www-form-urlencoded";
httpWReq.ContentLength = data.Length;
using (Stream stream = httpWReq.GetRequestStream())
{
stream.Write(data,0,data.Length);
}
HttpWebResponse response = (HttpWebResponse)httpWReq.GetResponse();
string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
请参阅以获取代码:HTTP REQUEST WITH POST
有关推理,请参阅:HTTP获取和发布参数建议