MVC3,在使用登录小部件时使用OpenIdPortableArea,UriFormatException

时间:2012-03-09 06:04:41

标签: asp.net-mvc openid dotnetopenauth mvccontrib

我的问题是,为什么当我点击我在以下teh程序添加到我的网站的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是它正在形成的回调网址,就像它不知道我的网站是什么一样?但这只是堆栈跟踪的猜测。

我做了什么:

我在.Net 4上使用MVC3。

我通过

安装了OpenIdPortableArea(documentation
 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中已经处理好了(并且在那里部署它会导致内部服务器错误)。然后我从文档中逐字创建了Message处理程序,并将这些调用放入Application_Start

  MvcContrib.Bus.AddMessageHandler(typeof(ClaimsRequestMessageHandler));
  MvcContrib.Bus.AddMessageHandler(typeof(AuthenticatedMessageHandler));

我将股票_LoginPartial.cshtml的内容替换为:

  @using  OpenIdPortableArea.UI
  @Html.LoginStatusWidget()

所以现在当我点击登录时,我会获得徽标,并可以输入我的开放ID或点击yahoo,google,aol,myopenid的图标......但是他们都给我上面的错误。我想我还没有做任何我需要做的事情来告诉OpenIdPortableArea我网站的基本网址?

(dotnet openaugh和mvc contrib正在OpenIdPortableArea,解释标记)

1 个答案:

答案 0 :(得分:1)

问题来自库中的错误,现在已在最新版本(2.0.0.2 available now on NuGet)中修复。该错误与构建返回URL以发送给OpenID提供程序有关。