DotNetOpenAuth с MVC 4.0 - PullRequest
       24

DotNetOpenAuth с MVC 4.0

7 голосов
/ 17 января 2012

Я пробовал примеры DotNetOpenAuth с ASP.Net MVC 4 Developer Preview.

Я могу успешно вызвать свое действие с моей тестовой страницы, но столкнулся со странной проблемой из-за одной строки кода:

  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 была скомпилирована для MVC V 1.0.0 и перенаправление привязки либо не работает, либо метод расширения работал против устаревшего метода.

Версия MVC: 4.0.0.0 DotNetOpenAuth Версия: 3.4.7.11121

Любая помощь по настройке работы с MVC 4 будет принята с благодарностью.Изображение экрана ошибки MVC ниже:

Изображение экрана ошибки

Обновление Я обнаружил, что причиной проблемы может быть AsActionResult, возможнопотому что метод расширения не совместим с .Net 4.0.Я могу получить объект OutgoingWebResponse из request.RedirectingResponse, но знаю, как преобразовать его в ActionResult

1 Ответ

6 голосов
/ 17 января 2012

Похоже, что ваши перенаправления привязки повреждены. Обратите внимание, как System.Web.Mvc появляется дважды? Попробуйте удалить второй, так как первый выглядит правильно.

Да, DNOA построен против MVC 1.0, и это сделано так, чтобы он работал со всеми версиями MVC (с учетом соответствующих перенаправлений). Это чисто версия MVC, а не версия .NET 4.0.

...