通常如果我使用HTTPClient并发出GetAsync(URI)或类似内容,如果我想传递一些参数,如“int id,string name,string division”,我需要将它们附加到uri:"http://localhost/webapplication/api/controller/action/id"
他们是否有任何替代这种传递参数的标准方法,以便信息在uri中不正确?
像HTTPClient.MessageParameters = myOBject
之类的东西放在邮件正文中,然后我可以在另一边解压缩?
如果没有其他选择,使用POST是否可以接受隐藏参数的方式?
由于
答案 0 :(得分:3)
使用POST是隐藏这些参数的可接受方式,如果执行请求有副作用,则应该在POST请求中提交它们。 GET请求可能会被代理或其他任何地方缓存,这可能会给您带来问题。我认为你理论上可以尝试更改请求标头,但是如果它们不标准,则无法保证服务器不会丢弃它们,因此您不应该考虑该选项。
编辑:有关X-header(非标准HTTP标头)的更多信息以及是否可以安全地使用它们,请参阅this question。看来他们现在已被弃用了。
答案 1 :(得分:2)
您至少有两个选择:
例如
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>
显然这需要额外的服务器端处理。
答案 2 :(得分:2)
我会去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();