没有OWIN身份验证管理器与请求关联

时间:2014-01-13 10:38:59

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

尝试启用owin&我的Web Api项目的AspNet标识(在VS 2013 + .Net 4.5.1中)我在每个有效或无效(请求到无存在的控制器)请求中收到以下错误:

<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>

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

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

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

9 个答案:

答案 0 :(得分:92)

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

max(postId)+1

答案 1 :(得分:88)

我终于找到了问题!在逐行比较新创建的项目并且没有发现任何差异之后,我检查了两个项目的参考文献,是的!...所有问题都来自缺失的包:

Microsoft.Owin.Host.SystemWeb

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

答案 2 :(得分:7)

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

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

答案 3 :(得分:3)

如果你真的不需要OWIN,你可以直接卸载它。

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

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

答案 4 :(得分:3)

我遇到了同样的问题。该程序包未出现在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 :(得分:1)

在Web.config中将owin:AutomaticAppStartup密钥更改为true为我修复此问题,即将其更改为:

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

到此:

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

答案 6 :(得分:0)

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

citizen

答案 7 :(得分:0)

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

或者确保 owin 实际运行时在 Startup 类中使用一个简单的语句

对我来说,它有助于在 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>

答案 8 :(得分:0)

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

Microsoft.Owin.Host.SystemWeb