DotNetOpenAuth с MVC 4.0

Я пробовал образцы 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;

Мне кажется, что dll 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.


person Shailen Sukul    schedule 17.01.2012    source источник
comment
Где-то я вижу ваш пример кода, чтобы заставить OpenId работать с MVC4. Я сталкиваюсь с многочисленными проблемами, начиная от путей к изображениям и заканчивая ошибками JS, когда я вызываю кнопку провайдера.   -  person Picflight    schedule 31.01.2012


Ответы (1)


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

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

person Andrew Arnott    schedule 17.01.2012
comment
У тебя действительно зоркий глаз. Спасибо!! Я думал, что схожу с ума. - person Shailen Sukul; 17.01.2012
comment
Спасибо Спасибо :) .. У меня была такая же проблема, для mvc3 это сработало для меня ‹bindingRedirect oldVersion=1.0.0.0 newVersion=3.0.0.0/›. - person labroo; 14.03.2012