У меня вопрос, почему, когда я нажимаю на кнопку openid, которую я добавил на свой сайт с помощью процедуры, описанной ниже, я получаю:
[UriFormatException: Invalid URI: The format of the URI could not be determined.]
System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) +6235084
System.Uri..ctor(String uriString) +20
OpenIdPortableArea.Areas.OpenId.Controllers.OpenIdController.GetAppRoot(HttpRequestBase request) +202
OpenIdPortableArea.Areas.OpenId.Controllers.OpenIdController.GetCallBackUrl(String url) +182
OpenIdPortableArea.Areas.OpenId.Controllers.OpenIdController.Login(LoginInput loginInput) +120
Я думаю, что URI, который он не понимает, является URL обратного вызова, который он формирует, как будто он не знает, что мой сайт? Но это всего лишь предположение из трассировки стека.
Что я сделал:
Я использую MVC3 в .Net 4.
Я установил OpenIdPortableArea ( документация )
PM> Install-Package OpenIdPortableArea.RazorViews
В только что созданном проекте MVC. И все прошло хорошо. Я удалил из web.config:
<section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, ...
Начиная с .Net 4, я считаю, что об этом позаботились в machine.config (и его появление вызвало внутреннюю ошибку сервера после развертывания). Затем я создал обработчики сообщений, дословно из документов, и поместил эти вызовы в Application_Start
MvcContrib.Bus.AddMessageHandler(typeof(ClaimsRequestMessageHandler));
MvcContrib.Bus.AddMessageHandler(typeof(AuthenticatedMessageHandler));
Я заменил содержимое _LoginPartial.cshtml на:
@using OpenIdPortableArea.UI
@Html.LoginStatusWidget()
Так что теперь, когда я получаю клик-логин, я получаю логотипы и могу ввести свой открытый идентификатор или щелкнуть значок Yahoo, Google, AOL, Myopenid ... но все они дают мне ошибку выше. Я думаю, что я не сделал все, что мне нужно, чтобы сообщить OpenIdPortableArea базовый URL моего сайта?
(dotnet openaugh и mvc contrib не поддерживают OpenIdPortableArea, чтобы объяснить тегирование)