我一直在尝试使用 ASP.Net MVC 4 Developer Preview 的 DotNetOpenAuth 示例。
我可以从我的测试页面成功调用我的操作,但由于一行代码遇到了一个奇怪的问题:
var request = _openid.CreateRequest(openIdUrl);
var fetch = new FetchRequest();
fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
fetch.Attributes.AddRequired(WellKnownAttributes.Name.First);
fetch.Attributes.AddRequired(WellKnownAttributes.Name.Last);
request.AddExtension(fetch);
//return RedirectToAction("Login");
return request.RedirectingResponse.AsActionResult(); // <-- This is the line throwing the error
如果我注释掉有问题的代码行并取消注释之前的代码,我不再看到运行时错误。
到目前为止,我已经尝试过:
1)确保我有正确的重定向:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
</dependentAssembly>
</assemblyBinding>
<legacyHMACWarning enabled="0" />
</runtime>
2)有正确的命名空间:
using DotNetOpenAuth.OpenId.Extensions.AttributeExchange;
using DotNetOpenAuth.OpenId.Extensions;
在我看来,DotNetOpenAuth dll 是针对 MVC V 1.0.0 编译的,并且绑定重定向要么不起作用,要么扩展方法可能对不推荐使用的方法起作用。
MVC 版本:4.0.0.0 DotNetOpenAuth 版本:3.4.7.11121
任何有关使用 MVC 4 的帮助将不胜感激。MVC 错误屏幕图像进一步如下:
更新 我发现 AsActionResult 是问题的原因,可能是因为扩展方法与.Net 4.0不兼容。我可以从 request.RedirectingResponse 获取 OutgoingWebResponse 对象,但知道如何将其转换为 ActionResult