[英]OwinStartup not firing
我让 OwinStartup 配置代码完美运行,然后它停止工作。 不幸的是,我不确定我做了什么才能让它停止工作,而且我真的很难弄清楚。
为了确保我掌握了基础知识,我再次检查以确保我拥有
[assembly:OwinStartup(typeof(WebApplication.Startup))]
属性分配正确,并确保我没有设置为 false 的 owin:AutomaticAppStartup 的 appSetting,因此我将一个设置为 true 以确保安全,因为之前没有任何内容。
<add key="owin:AutomaticAppStartup" value="true" />
我还尝试专门调用 appSetting:
<add key="owin:appStartup" value="WebApplication.Startup" />
在它停止工作之前,我将 Microsoft.Owin.Security NuGet 包升级到 2.0.2,所以我尝试将它们恢复到 2.0.1(这很痛苦)但它没有改变任何东西。 我在项目上安装了 WebActivator 并使用它来引导其他东西,但我已经在一个新的 WebApplication 模板上测试了它并且它在那里工作,所以我认为这不是罪魁祸首。
我还尝试删除我的 Startup 类并使用 Visual Studio 使用添加新项中的 OWIN 启动类类型添加一个新的类,并且也没有被调用。 接下来我尝试添加第二个 Startup 类,因为我知道如果定义了多个 OwinStartup 属性,它会抛出异常,但它不会在那里抛出任何异常。
不知道还有什么可以尝试的。 有什么想法吗?
更新
事实证明,当我使用它删除未使用的引用时,Resharper 删除了对 Microsoft.Owin.Host.SystemWeb 的引用。
确保您已在项目中安装Microsoft.Owin.Host.SystemWeb
包。 IIS 托管应用程序中的启动检测需要此包。 有关更多信息,您可以参考这篇文章。
如果您从较旧的 MVC 版本升级,请确保您没有
<add key="owin:AutomaticAppStartup" value="false" />
在您的web.config
。 它将抑制调用启动逻辑。
而是将其更改为true
<add key="owin:AutomaticAppStartup" value="true" />
我意识到您已经提到了这一点,但有时人们(像我一样)不会阅读整个问题而只是跳到答案......
沿着这条线的某个地方 - 当我升级到 MVC 5 时,它被添加了,直到今天我才看到它。
讨论的原始问题的替代答案 - Owin“不开火”。 就我而言,由于无法在其中设置断点,我花了几个小时认为它没有触发。
在visual studio中调试OWIN启动时
IIS Express - 运行“F5”将中断 OWIN 启动代码
IIS - 在加载 OWIN(和 global.asax)代码之前,运行“F5”不会中断。 如果您附加到 W3P.exe,您将能够进入它。
如果您在调试Startup
类中的代码时遇到问题,我也遇到了这个问题 - 或者我认为我遇到了。 代码正在触发,但我相信它发生在调试器连接之前,因此您无法在代码上设置断点并查看发生了什么。
您可以通过在Startup
类的Configuration
方法中抛出异常来证明这一点。
调试技巧
如果调试不起作用,请尝试使用 IIS Express 或针对本地 IIS 尝试以下方法
使用本地 IIS
出于某种原因,此方法可以调试此方法:
额外小费
也许这样做会刷新缓存:
在 web.config 中添加带有 false 值的 optimizeCompilations 属性
<compilation debug="true" ... optimizeCompilations="false">
运行站点
我有一个类似的问题,清除临时 ASP.NET 文件修复了它。 希望这可以帮助某人。
我有同样的问题。 Microsoft.Owin.Host.SystemWeb 包已安装,但在安装过程中,由于某种原因,NuGet 无法添加 dll 作为参考。 确保您的项目具有该参考。 如果没有,您可以尝试重新安装:
update-package Microsoft.Owin.Host.SystemWeb -reinstall
我在重新安装时遇到了如下错误,但不知何故它起作用了:
系统调用失败。 (来自 HRESULT 的异常:0x80010100 (RPC_E_SYS_CALL_FAILED))
当我将 Owin 添加到现有的 Web 项目时,我遇到了同样的问题。 我最终发现问题是由于 web.config 文件中的以下内容造成的。
<assemblies>
<remove assembly="*" />
<add assembly="System.Web.Mvc" />
<add assembly="System.Web.WebPages" />
...
</assemblies>
删除程序集="*" 导致了问题。 当我删除这一行时,Owin 启动代码运行了。 我最终将其更改为以下内容,并且效果很好
<assemblies>
<remove assembly="*" />
<add assembly="Microsoft.Owin.Host.SystemWeb" />
<add assembly="System.Web.Mvc" />
<add assembly="System.Web.WebPages" />
<add assembly="System.Web.Helpers" />
...
</assemblies>
在我的例子中,这个 Microsoft.Owin.Host.SystemWeb 包存在于项目中。
但是以下两个标签在 web.config 中不存在。
<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:appStartup" value="namespace.className.methodName" />
添加它们后,它可以顺利运行。
就我而言,IIS 应用程序池未设置为 v4。 这是 v2。
将 AppPool 更改为 v4,一切正常。
就我而言,我的网站的输出路径被某人更改了,IIS Express甚至不加载OWIN,当然也不会命中安装类。 我将输出路径设置为“bin\\”后,效果很好。
就我而言,我的 web.config 有
<authorization>
<allow users="?" />
</authorization>
为了迫使它回落到 Owin,我需要它
<authorization>
<deny users="*" />
</authorization>
我不确定这是否仍然对某人有帮助,但我已经完成了上面(以及其他一些帖子)的所有解决方案,但无济于事。
解决这个问题的方法是在 web.config 中 RedirectUri 值的末尾加上一个反斜杠(疯狂,我知道!)。 RedirectUri 是 UseOpenIdConnectAuthentication 中的一个参数。
所以,而不是:
<add key="ida:RedirectUri" value="https://www.bogussite.com/home" />
这样做:
<add key="ida:RedirectUri" value="https://www.bogussite.com/home/" />
并更新了 Azure 应用设置上的回复 URL。
这以某种方式使启动按预期运行(可能清除了一些缓存),并且断点现在正在触发。
仅供参考。 我从这里对我的代码进行建模: https : //github.com/microsoftgraph/aspnet-connect-sample
把一个类库转换成一个Web应用项目后,我遇到了这个,变得很固执。 原来,在我的.csProj
文件中,我有这个:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
OutputPath
两个文本内容都更改为bin\\
。对我来说,这是因为它们不在同一个命名空间中。 在我从“project.Startup.AppStart”中删除我的 AppStart 并让它们都带有“project.Startup”命名空间的 Startup.cs 和 Startup.Auth.cs 后,一切都恢复正常了。
我希望它有帮助!
如果您在 IIS 托管时看到此问题,但在 F5 调试时没有看到,请尝试在 IIS 中创建一个新应用程序。
这为我修好了。 (Windows 10)最后,我删除了“坏”的 IIS 应用程序,并重新创建了一个同名的相同应用程序。
我认为有些人试图在上面提到的是,如果你想以编程方式让你的 OWIN 服务器“活跃起来”,你会调用这样的东西:
using Microsoft.Owin.Hosting;
IDisposable _server = WebApp.Start<StartupMethod>("http://+:5000");
// Start Accepting HTTP via all interfaces on port 5000
进行此调用后,您将在调试器中看到对 StartupMethod() 的调用
我发现以下文章非常有帮助:
在我的情况下,我必须在 Owin 身份验证而不是 Windows 身份验证工作之前设置以下内容:
<system.web>
<authentication mode="None" />
<system.web>
这对我有用:
添加身份验证模式=“无”
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" />
<authentication mode="None" /><!--Use OWIN-->
</system.web>
如果您的解决方案中有多个主机使用相同的命名空间,请确保将它们放在单独的 IISExpress 端口上(并删除 .vs 文件夹并重新启动 vs)。
我对这篇文章的很多建议感到困惑。
我有以下但仍然无法落在断点上。 抛出异常证明正在输入代码。
<appSettings>
...
<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:appStartup" value="SSOResource.Startup, SSOResource" />
...
</appSettings>
最后无奈之下我查看了project->properties,然后在WEB部分下我还勾选了NATIVE CODE复选框(ASP.NET应该已经被勾选了)。
这终于为我修好了。
注意:我使用的是 Visual Studio 2017 Professional。
首先添加 OWIN Auth 类,然后在您的 web.config 中启用OWIN:AutomaticAppStartup键,例如现在它会火
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.