【问题标题】:No OWIN authentication manager is associated with the request没有 OWIN 身份验证管理器与请求相关联
【发布时间】:2014-02-01 01:48:27
【问题描述】:

在尝试为我的 Web Api 项目(在 VS 2013 + .Net 4.5.1 中)启用 owin 和 AspNet Identity 后,我在每个有效或无效(对不存在控制器的请求)请求中都收到以下错误:

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
No OWIN authentication manager is associated with the request.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace>
at System.Web.Http.Owin.PassiveAuthenticationMessageHandler.SuppressDefaultAuthenticationChallenges(HttpRequestMessage request) at System.Web.Http.Owin.PassiveAuthenticationMessageHandler.<SendAsync>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.HttpServer.<SendAsync>d__0.MoveNext()
</StackTrace>
</Error>

当我在调试模式下检查时,也没有处理任何异常!我还意识到Startup 类中的Configuration 从未被调用(实际上从未被调试器捕获)。这是启动代码:

[assembly: OwinStartup(typeof(bloob.bloob.Startup))]

namespace bloob.bloob
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
        }
    }
}

【问题讨论】:

    标签: c# asp.net-mvc-5 owin windows-authentication


    【解决方案1】:

    我终于找到问题了!在与新创建的项目逐行比较并发现没有区别后,我检查了两个项目的引用,是的!...所有问题都来自缺少包:

    Microsoft.Owin.Host.SystemWeb
    

    我不知道为什么在包安装阶段错过了这个包,但奇怪的是为什么没有抛出任何构建异常?或者没有任何 dll 引用错误?

    【讨论】:

    • 您的答案需要详细信息。在哪里添加此引用以及发生错误的原因?
    • 1- 在您的 mvc 项目的 dll 中。 2- 正如我提到的,我不知道原因
    • @ahmadalibaloch 那是完美的
    • 谢谢,我在 nuget 中安装后就可以使用了,现在我可以生成访问令牌了
    • Tools > NuGet Package Manager > Manage NuGet packages for Solution... > Browse > 搜索并安装Microsoft.Owin.Host.SystemWeb
    【解决方案2】:

    我最初使用身份验证创建项目,但后来决定禁用它。我必须在 WebApiConfig.cs 文件中删除它。如果您打算启用身份验证,请确保您拥有此功能。

            // Web API configuration and services
            // Configure Web API to use only bearer token authentication.
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
    

    【讨论】:

    • 这个代码块是为 WebAPI 配置身份验证的地方。删除它将禁用任何身份验证。
    • 如果您只是想关闭 webapi 管道中的所有身份验证,您可以注释掉上面的 3 行,为我工作!
    • hmm,我这样做了,并添加了 web.config 设置 key="owin:AutomaticAppStartup" value="false",但仍然出现此错误
    • 了解如何关闭身份验证很有用,这确实可以消除错误。但他的意图是启用身份验证,因此这并不能真正回答问题。
    【解决方案3】:

    我的情况,因为 web.config 中的这个设置失败了。希望这可以帮助某人避免它。

    <appSettings>
        <add key="owin:AutomaticAppStartup" value="false" />
    </appSettings>
    

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题。该包未出现在 NuGet 包管理器中。 我在 packages.config 中添加了参考:

       <package id="Microsoft.Owin.Host.SystemWeb" version="2.1.0" targetFramework="net45" />
      

      并在项目文件(xxx.csproj)中引用:

       <Reference Include="Microsoft.Owin.Host.SystemWeb">
        <HintPath>..\packages\Microsoft.Owin.Host.SystemWeb.2.1.0\lib\net45\Microsoft.Owin.Host.SystemWeb.dll</HintPath>
      </Reference>
      

      【讨论】:

        【解决方案5】:

        在 Web.config 中将 owin:AutomaticAppStartup 键更改为 true 为我解决了这个问题,即将其更改为:

        <appSettings>
            <add key="owin:AutomaticAppStartup" value="false" />
        </appSettings>
        

        到这里:

        <appSettings>
            <add key="owin:AutomaticAppStartup" value="true" />
        </appSettings>
        

        【讨论】:

          【解决方案6】:

          如果您实际上不需要 OWIN,您可以简单地卸载它。

          一种方法是在 Nuget Manager 中卸载每个 OWIN 库,顺序将由它们的依赖项决定。

          完成此操作后,您不需要任何与 OWIN 相关的代码或配置。这对我来说效果最好,因为我使用的是 Windows 身份验证。

          【讨论】:

            【解决方案7】:

            对于 .Net 框架,将 runAllManagedModulesForAllRequests 属性添加到 web.config 中的模块。这样我就保持了身份验证的存在。

            <modules runAllManagedModulesForAllRequests="true">
            

            【讨论】:

              【解决方案8】:

              我终于找到问题了!在与新创建的项目逐行比较并发现没有区别后,我检查了两个项目的引用,是的!...所有问题都来自缺少包:

              Microsoft.Owin.Host.SystemWeb

              【讨论】:

                【解决方案9】:

                如果以上方法都没有帮助,您可以尝试使用以下命令重新安装: 更新包 Microsoft.Owin.Host.SystemWeb -重新安装

                或者通过 Startup 类中的简单语句确保 owin 实际运行

                对我来说,它有助于在 web.config 中添加程序集:

                <system.web>
                    <compilation debug="true" targetFramework="4.5.2" batch="false" optimizeCompilations="true" defaultLanguage="C#">
                       <assemblies>
                           <add assembly="Microsoft.Owin.Host.SystemWeb" />
                       </assemblies>
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-11-14
                  • 2015-10-09
                  • 2018-03-26
                  • 2019-10-19
                  • 2015-11-12
                  • 2016-03-24
                  • 2015-09-23
                  相关资源
                  最近更新 更多