我有非常简单的代码,对我来说效果很好:
var url = System.Web.HttpContext.Current.Request.Url;
Uri callbackUrl = new System.Uri(url, "oAuth2CallBack");
var ub = new UriBuilder(callbackUrl);
// decodes urlencoded pairs from uri.Query to var
var httpValueCollection = HttpUtility.ParseQueryString(callbackUrl.Query);
httpValueCollection.Add(UrlArguments.Param, null);
// urlencodes the whole HttpValueCollection
ub.Query = httpValueCollection.ToString();
var authorizationRequest = OAuthClient.PrepareRequestUserAuthorization(new[] { "somedata" }, ub.Uri);
authorizationRequest.Send();
我已经更新了 OAuth 的 NuGet 包并以这种方式重写了代码:
var url = System.Web.HttpContext.Current.Request.Url;
Uri callbackUrl = new System.Uri(url, "oAuth2CallBack");
var ub = new UriBuilder(callbackUrl);
// decodes urlencoded pairs from uri.Query to var
var httpValueCollection = HttpUtility.ParseQueryString(callbackUrl.Query);
httpValueCollection.Add(UrlArguments.Param, null);
// urlencodes the whole HttpValueCollection
ub.Query = httpValueCollection.ToString();
var client = new WebServerClient(new AuthorizationServerDescription
{
TokenEndpoint = Configuration.OAuth2.TokenEndpoint,
AuthorizationEndpoint = Configuration.OAuth2.AuthorizationEndpoint,
},
clientIdentifier: Configuration.OAuth2.ClientIdentifier,
clientCredentialApplicator: ClientCredentialApplicator.PostParameter(
Configuration.OAuth2.ClientSecret));
var authorizationRequest = await client.PrepareRequestUserAuthorizationAsync(new[] { "somedata" }, ub.Uri);
await authorizationRequest.SendAsync();
但是 PrepareRequestUserAuthorizationAsync
抛出异常
"Attempt by method 'DotNetOpenAuth.OAuth2.WebServerClient+d__3.MoveNext()' to access method 'System.Collections.Generic.List`1..ctor()' failed."
最佳答案
问题是 DotNetOpenAuth.OAuth2.Client 从 WebApi nuget 包中引用了 System.Net.Http.Formatters 5.0。从 .NET 4.0/4.5 BCL 设置对 System.Net.Http.Formatters 4.0 的引用解决了这个问题,所有测试仍然通过。
查看github上的提交 https://github.com/rcollette/DotNetOpenAuth/commit/59fe1e820fc48df8bb079b210ac585974f8326f5
查看拉取请求 https://github.com/DotNetOpenAuth/DotNetOpenAuth/pull/350
关于c# - PrepareRequestUserAuthorizationAsync 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20053248/