有多少种方法可以通过HTTP GET传递参数?

时间:2013-08-01 18:11:54

标签: c# .net http asp.net-web-api

通常如果我使用HTTPClient并发出GetAsync(URI)或类似内容,如果我想传递一些参数,如“int id,string name,string division”,我需要将它们附加到uri:"http://localhost/webapplication/api/controller/action/id"

他们是否有任何替代这种传递参数的标准方法,以便信息在uri中不正确?

HTTPClient.MessageParameters = myOBject之类的东西放在邮件正文中,然后我可以在另一边解压缩?

如果没有其他选择,使用POST是否可以接受隐藏参数的方式?

由于

3 个答案:

答案 0 :(得分:3)

使用POST是隐藏这些参数的可接受方式,如果执行请求有副作用,则应该在POST请求中提交它们。 GET请求可能会被代理或其他任何地方缓存,这可能会给您带来问题。我认为你理论上可以尝试更改请求标头,但是如果它们不标准,则无法保证服务器不会丢弃它们,因此您不应该考虑该选项。

编辑:有关X-header(非标准HTTP标头)的更多信息以及是否可以安全地使用它们,请参阅this question。看来他们现在已被弃用了。

答案 1 :(得分:2)

您至少有两个选择:

  • 添加包含您数据的自定义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请求

答案 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();

参见代码:HTTP REQUEST WITH POST

查看原因:HTTP GET AND POST PARAMETERS RECOMMENDATIONS