所有的人。
我正在实现一个Bible ASP.NET Web Application,在Bible ASP.NET Web Application中,我调用了以下第三方Web服务。在Bible ASP.NET Web Application中,我调用了以下第三方Web服务API URL。
https:/bibles.orgv2passages.js?q[]=john+3:1-5&version=eng-KJVA。
在ASP.NET Web应用程序中,我有以下代码。
String populatedPassagesEndpointUri = "https://bibles.org/v2/passages.js?q[]=john+3:1-5&version=eng-KJVA";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(populatedPassagesEndpointUri);
request.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(ConfigurationManager.AppSettings.Get("APIToken") + ":" + "X"));
request.Method = "GET";
String test = String.Empty;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
test = reader.ReadToEnd();
reader.Close();
dataStream.Close();
}
如果你分析我上面使用的Web Service API url,你会注意到它使用了[]方括号,我认为在URL中使用方括号是一种不好的做法。
https:/bibles.orgv2passages.js?q[]=john+3:1-5&version=eng-KJVA。
遗憾的是,提供Web服务API的是第三方,所以我无能为力。 我被迫使用带有[]的URL。
在任何情况下,我在我的Bible ASP.NET Web应用程序中执行了上面的代码,然而,上面的Webservice api URL调用给了我一个401错误,这是否与URL中的[]方括号有关?如果是,在调用Web SErvice API URL调用之前,是否有办法将URL中的[]方括号转义?
你应该使用这个
HttpUtility.UrlEncode()
你的代码会变成
String populatedPassagesEndpointUri = HttpUtility.UrlEncode("https://bibles.org/v2/passages.js?q[]=john+3:1-5&version=eng-KJVA");
来对你的请求的url进行编码。
关于SO的类似问题
我想问题不在于URL,而在于你使用的认证方法。
上面的Webservice api URL调用给我的结果是 401错误
401错误表示你的认证失败。
我尝试了你提供的URL。它确实接受基本认证,但我怀疑你提供的格式。
从你的代码来看,你是说你的基本认证方式是 帐号 是一些 API令牌 ,你的密码是 X之类的. 似乎不对
你们服务器返回的境界是 ABS API 而我得到的错误信息是
需要授权
你必须提供一个API令牌或用户名和密码才能访问这个页面。
所以我想你应该使用基于令牌的认证,因为你从配置文件中得到了一个APIToken,而不是一个用户名和密码。
做token认证的方法有很多种。
它可以是这样的
https://bibles.org/v2/passages.js?q[]=john+3:1-5&version=eng-KJVA&token=your API token
或者在认证头中传递令牌,如
Bearer yourAPItoken
总的来说,你需要仔细检查你的认证方式,试着找一些关于你的网站的文件,或者向网站寻求支持。
更新一下,你收到401错误的原因是由于你原来的请求被重定向,而你的认证方式会被重定向。
你收到401错误的原因是由于你的原始请求被重定向,而你的认证头在重定向后将无法存活。
你需要设置你的httpWebRequest.AllowAutoRedirect = false ,并测试响应代码,如果发现302,创建一个新的请求到重定向位置。
这可能会帮助你 http:/www.codeproject.comArticles49243Handling-Cookies-with-Redirects-and-HttpWebRequest
这是我自己的实现,你可以根据自己的需要进行修改。
首先,将IHttpContextAccessor注入到你要实现这段代码的类中。
然后利用我下面的代码,以适应你想要实现的东西。
var request = _httpConAccessor.HttpContext.Request;
var builder = new UriBuilder();
builder.Scheme = request.Scheme;
builder.Port = request.Host.Port.GetValueOrDefault();
builder.Path = "/Home/ConfirmEmail";
var query = HttpUtility.ParseQueryString(builder.Query);
query["userId"] = user.EmailAddress;
query["token"] = user.ActivetionCode.ToString();
builder.Query = query.ToString();
string link = builder.ToString();
var link2 = HttpUtility.UrlDecode(link);
return link2;
对我来说,这个函数的输出是这样的:
https://localhost:44330/Home/[email protected]&token=b5867906-7ede-44yd-adrt4-0272a5cacd
而不是
https://[localhost:44330]/Home/[email protected]&token=b5867906-7ede-44yd-adrt4-0272a5cacd
观察一下,方括号是没有的。
快乐编码。