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

在尝试为我的 Web Api 项目启用 owin & AspNet Identity 之后(在 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>

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

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


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

我终于找到问题所在了!在逐行比较一个新创建的项目并且没有发现任何差异之后,我检查了两个项目的参考资料,是的!所有的问题都是因为包裹丢了:

Microsoft.Owin.Host.SystemWeb

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

我最初使用身份验证创建了这个项目,但后来决定禁用它。我必须在 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));

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

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

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

一种方法是在 Nuget 管理器卸载每个 OWIN 库,顺序将由他们的依赖关系决定。

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

我也遇到了同样的问题,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>

在 Web.config 中将 owin:AutomaticAppStartup键改为 true为我修复了这个问题,即将它从:

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

回到这里:

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

对于.Net 框架来说,将 所有请求的管理模块属性添加到 Web.config中的模块。

<modules runAllManagedModulesForAllRequests="true">

如果上述任何一个都没有帮助,您可以尝试使用以下命令重新安装: Update-package 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>

我终于找到问题所在了!在逐行比较一个新创建的项目并且没有发现任何差异之后,我检查了两个项目的参考资料,是的!所有的问题都是因为包裹丢了:

微软。欧文。主机。系统网