C# HttpWebRequest请求带有“quot;”&引用;在API URL中
我试图获取一个API REST响应,但API的URL中有一个“?”(参见下面的示例) 有没有办法逃避这一切 我尝试了C# HttpWebRequest请求带有“quot;”&引用;在API URL中,c#,api,httpwebrequest,C#,Api,Httpwebrequest,我试图获取一个API REST响应,但API的URL中有一个“?”(参见下面的示例) 有没有办法逃避这一切 我尝试了Uri.EscapeUriString和HttpUtility.HtmlEncode,但也不起作用 有什么想法吗?你不需要逃避任何事情。?将url的路径部分与查询字符串部分分开http://api.mydomain.com/news/?tag=sports是一个完全有效的url 或者您的API期望:http://api.mydomain.com/news/sports?如果不知道要
Uri.EscapeUriString
和HttpUtility.HtmlEncode
,但也不起作用
有什么想法吗?你不需要逃避任何事情。
?
将url的路径部分与查询字符串部分分开<代码>http://api.mydomain.com/news/?tag=sports是一个完全有效的url
或者您的API期望:
http://api.mydomain.com/news/sports
?如果不知道要使用哪个API,很难说。请尝试将Uri
对象而不是字符串传递给Create()
方法
HttpWebRequest request = WebRequest.Create(new Uri("http://api.mydomain.com/news/?tag=sports")) as HttpWebRequest;
首先,您必须使用不带参数的url创建请求
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://api.mydomain.com/news/");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
在此之后,创建一个字符串来发布参数
strParams = "tag=" + strTag;
req.ContentLength = strSaida.Length;
然后写下来
stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(strParams);
stOut.Close();
这就是您需要的吗?这是一个有效的url。为什么要逃避它?似乎“?”正在破坏API的URL,API正在使用默认类别进行响应。
似乎“?”正在破坏API的URL
。不需要。您应该阅读API文档来了解如何获取运动类别。我的难题是,使用PHP curl()上述url返回的数据是正确的。但是当使用相同url的WebRequest.Create()时,API不会返回相同的数据(默认为基本类别)。我基本上想知道我是否做错了什么,遗漏了什么,或者这是否是.NET发送请求的方式的问题。我相信当我把“?”放在WebRequest.Create()中时,url正在被编码。。。因此,API没有识别参数,而是返回默认类别(即“全部”)。我知道URL是一个有效的URL。。。我遇到的问题是,当使用HttpWebRequest=WebRequest.Create()时,url(带“?”)不起作用@user1287083,那么,也许你应该查阅你试图使用的API的文档,或者联系作者,询问他们你应该使用什么url才能在运动标签中获取新闻。这不是一个我们可以帮助您解决的问题;它工作没有问题。我会联系开发人员谁建立了API,并问他关于它。。。也许他可以调试代码并记录get请求,以查看使用WebRequest.Create()时发送的内容;。url是“api.mydomain.com/news/?tag=sports”。。。我确信。。。使用PHP curl对其进行了验证。我遇到的问题是,我现在需要在ASP.NET中创建一个页面,以获取带有“sport”标记的故事。文档说明正确的格式是“api.mydomain.com/news/?tag=sports”。。。所以这不是问题所在。我的问题是,在WebRequest.Create(此处为url)中使用url时,url不起作用。我甚至在PHP中创建了一个页面来返回json,同时我解决了这个问题,但这是一个我不想在生产中使用的黑客行为。
stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(strParams);
stOut.Close();