C# 有多少种不同的方法可以通过HTTP GET传递参数?
通常,如果我使用HTTPClient并发出GetAsync(URI)或类似命令,如果我想传递一些参数,如“int-id、string-name、string-division”,我需要将它们附加到URI:C# 有多少种不同的方法可以通过HTTP GET传递参数?,c#,.net,http,asp.net-web-api,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的东西放在消息体中,
”http://localhost/webapplication/api/controller/action/id“
他们是否有其他方法可以替代这种传递参数的标准方法,从而使信息在uri中不正确
类似于HTTPClient.MessageParameters=myOBject
的东西放在消息体中,然后我可以在另一侧解包
如果没有替代方案,使用POST隐藏参数是否是一种可接受的方法
谢谢您至少有两种选择:
- 添加包含数据的自定义http头
X-Var-Count:3
X-Var-Name-1:id
X-Var-Value-1:
X-Var-Name-2:名称
X-Var-Value-2:
X-Var-Name-3:分部
X-Var-Value-3:
显然,这需要额外的服务器端处理
- 切换到POST请求
编辑:有关X-Header(非标准HTTP头)以及是否可以安全使用它们的更多信息,请参阅。看来他们现在已经被弃用了。我想发一篇帖子 通过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();
有关代码,请参见:
有关推理,请参阅:可以通过向url添加一个带有随机生成值的伪参数来避免缓存。当然可以,但既然已经有一个HTTP谓词用于此目的,为什么要这样做呢?我想这取决于您的应用程序。组装POST请求可能会很麻烦,更重要的是,有时需要在url中包含参数(例如,触发url重写或通过代理发送请求)。感谢链接到X-headers rfc。我不明白他们的道理。引用自:
2。应该使用他们有理由相信当前未使用的有意义的参数名称;3.不应在其参数名称前加上“X-”或类似结构。
。因此,我使用带有X-
的标题来表示有意义的名称所建议的语义+该标题未被官方标准维护机构分配或注册的信息。@collapsar,谁说您不能在URL中包含带有POST请求的参数?没有什么能阻止您这样做,大多数REST服务似乎都能做到这两个方面。
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();