c# - PrepareRequestUserAuthorizationAsync 失败

标签 c# asp.net-mvc asp.net-mvc-5 dotnetopenauth

我有非常简单的代码,对我来说效果很好:

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/

相关文章:

c# - Html.BeginForm 会在该区域后自动添加一个子文件夹

c# - 最佳实践 - 隐藏数据网格列的安全问题

c# - 使用主题等 WPF 样式

asp.net-mvc - 资源类型 'XXXX.XXX' 没有名为 '_RequiredXXXX' 的公开可见静态属性

c# - 使用 ViewBag 动态显示图像

c# - 如何将 ApplicationDbContext 传递给 ASP.NET MVC5 构造函数?

c# - 如何通过相同的函数对我的代码进行多线程处理以同时处理多个文件?

c# - 如何在不考虑缓存域凭据的情况下验证域凭据

javascript - 调用 javascript 加载函数和 Controller 操作

asp.net - 未定义无参数构造函数对象