我让 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 在 Add New Item 中使用 OWIN Startup Class 类型添加一个新的类,并且也没有被调用。接下来我尝试添加第二个 Startup 类,因为我知道如果定义了多个 OwinStartup 属性,它将引发异常,但它不会在那里引发任何异常。
不知道还有什么可以尝试的。有什么想法吗?
更新
事实证明,当我使用 Resharper 删除未使用的引用时,Resharper 删除了对 Microsoft.Owin.Host.SystemWeb 的引用。
如果您已从较旧的 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
由于某种原因,此方法可以调试此方法:
请求网页 附加到 w3wp.exe 进程 触摸 web.config 文件 请求网页
额外小费
也许这样做会刷新缓存:
在 web.config 中添加带有 false 值的 optimizeCompilations 属性
optimizeCompilations="false"
对我有用
我有一个类似的问题,清除临时 ASP.NET 文件修复了它。希望这可以帮助某人。
Temporary ASP.NET Files
文件夹内容并调用 Owin 启动后。
我有同样的问题。 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,一切正常。
就我而言,我的 web.config 有
<authorization>
<allow users="?" />
</authorization>
为了迫使它回到欧文,我需要它是
<authorization>
<deny users="*" />
</authorization>
就我而言,我的网站的输出路径被某人更改了,IIS Express 甚至没有加载 OWIN,当然安装程序类也不会被命中。在我将输出路径设置为“bin\”后,它运行良好。
我发现以下文章非常有帮助:
在我的情况下,我必须在 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>
我不确定这是否仍会帮助某人,但我已经完成了上述所有解决方案(以及其他一些帖子),但无济于事。
解决我的问题的方法是在 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
在converting a class library to a Web Application Project之后,我遇到了这个并变得固执。结果,在我的 .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>
从而将各种 dll 构建到 bin 文件夹的子文件夹中(ifc. 不起作用)。解决方案是将 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() 的调用
如果您的解决方案中有多个主机使用相同的命名空间,请确保将它们放在单独的 IISExpress 端口上(并删除 .vs 文件夹并重新启动 vs)。
我在这篇文章中提出了很多建议。
我有以下但仍然无法降落在断点上。抛出异常证明正在输入代码。
<appSettings>
...
<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:appStartup" value="SSOResource.Startup, SSOResource" />
...
</appSettings>
最后出于绝望,我查看了项目-> 属性,然后在 WEB 部分下,我还检查了 NATIVE CODE 复选框(应该已经检查了 ASP.NET)。
这终于为我解决了。
注意:我使用的是 Visual Studio 2017 Professional。
首先添加 OWIN Auth 类,然后在 web.config 中启用 OWIN:AutomaticAppStartup 键,就像现在它会触发一样
Startup.Configuration(IAppBuilder)
?