asp.net-mvc-3 – 使用Razor视图抛出有关DotNetOpenAuth.IEmbeddedResourceRetrieval的InvalidOperationException

当我的Razor视图调用@ Html.OpenIdSelector时(…我得到一个InvalidOperationException:

The current IHttpHandler is not one of
types: System.Web.UI.Page,
DotNetopenAuth.IEmbeddedResourceRetrieval.
An embedded resource URL provider must
be set in your .config file.

我应该在配置文件中设置什么?

解决方法

只需 NuGet DotNetopenAuth包.它将在配置文件中设置您需要的所有内容

>在解决方案资源管理器中右键单击Web项目的引用
>添加库包参考…
>单击“在线”选项卡.
>在搜索框中键入dotnetopenauth
>单击“安装”

一切都将自动设置,正确的组件将从互联网上下载并作为参考添加.

以下是执行此操作后web.config文件的外观:

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application,please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->
<configuration>
  <configSections>
    <section name="uri" type="System.Configuration.UriSection,System,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" />
    <section name="dotNetopenAuth" type="DotNetopenAuth.Configuration.DotNetopenAuthSection" requirePermission="false" allowLocation="true" />
  </configSections>
  <connectionStrings>
    <add name="applicationservices" connectionString="data source=.\sqlEXPRESS;Integrated Security=sspI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.sqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions,Version=4.0.0.0,PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers,Version=1.0.0.0,PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing,PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc,Version=3.0.0.0,PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages,PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/logon" timeout="2880" />
    </authentication>
    <membership>
      <providers>
        <clear />
        <add name="AspNetsqlMembershipProvider" type="System.Web.Security.sqlMembershipProvider" connectionStringName="applicationservices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minrequiredPasswordLength="6" minrequiredNonalphanumericCharacters="0" passwordAttemptwindow="10" applicationName="/" />
      </providers>
    </membership>
    <profile>
      <providers>
        <clear />
        <add name="AspNetsqlProfileProvider" type="System.Web.Profile.sqlProfileProvider" connectionStringName="applicationservices" applicationName="/" />
      </providers>
    </profile>
    <roleManager enabled="false">
      <providers>
        <clear />
        <add name="AspNetsqlRoleProvider" type="System.Web.Security.sqlRoleProvider" connectionStringName="applicationservices" applicationName="/" />
        <add name="AspNetwindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
    <legacyHMACWarning enabled="0" />
  </runtime>
  <uri>
    <!-- The uri section is necessary to turn on .NET 3.5 support for IDN (international domain names),which is necessary for OpenID urls with unicode characters in the domain/host name. 
         It is also required to put the Uri class into RFC 3986 escaping mode,which OpenID and OAuth require. -->
    <idn enabled="All" />
    <iriParsing enabled="true" />
  </uri>
  <system.net>
    <defaultProxy enabled="true" />
    <settings>
      <!-- This setting causes .NET to check certificate revocation lists (CRL) 
                 before trusting HTTPS certificates.  But this setting tends to not 
                 be allowed in shared hosting environments. -->
      <!--<servicePointManager checkCertificateRevocationList="true"/>-->
    </settings>
  </system.net>
  <dotNetopenAuth>
    <!-- This is an optional configuration section where aspects of dotnetopenauth can be customized. -->
    <!-- For a complete set of configuration options see http://www.dotnetopenauth.net/developers/code-snippets/configuration-options/ -->
    <openid>
      <relyingParty>
        <security requireSsl="false" />
        <behaviors>
          <!-- The following OPTIONAL behavior allows RPs to use SREG only,but be compatible
                         with OPs that use Attribute Exchange (in varIoUs formats). -->
          <add type="DotNetopenAuth.OpenId.Behaviors.AXFetchAsSregTransform,DotNetopenAuth" />
        </behaviors>
      </relyingParty>
    </openid>
    <messaging>
      <untrustedWebRequest>
        <whitelistHosts>
          <!-- Uncomment to enable communication with localhost (should generally not activate in production!) -->
          <!--<add name="localhost" />-->
        </whitelistHosts>
      </untrustedWebRequest>
    </messaging>
    <!-- Allow DotNetopenAuth to publish usage statistics to library authors to improve the library. -->
    <reporting enabled="true" />
  </dotNetopenAuth>
</configuration>

更新:

您可以实现自定义资源检索提供程序:

public class CustomresourceProvider : IEmbeddedResourceRetrieval
{
    public Uri GetWebResourceUrl(Type someTypeInResourceAssembly,string manifestResourceName)
    {
        return new Uri("http://www.google.com");
    }
}

然后在web.config注册它:

<dotNetopenAuth>
    <webResourceUrlProvider type="AppName.CustomresourceProvider,AppName" />
    ...
</dotNetopenAuth>

但我建议您使用openid-selector生成登录表单.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....