我有OwinStartup配置代码完美地工作,然后它停止工作。不幸的是,我不确定我到底做了什么来让它停止工作,我有一个非常困难的时间来弄清楚。

为了确保我掌握了基本知识,我反复检查以确保我掌握了

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

属性正确分配,并确保我没有一个appSetting为owin:AutomaticAppStartup,设置为false,所以我做了一个设置为true,以确保安全,因为之前没有什么。

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

我还尝试特别调用appSetting:

<add key="owin:appStartup" value="WebApplication.Startup" />

在它停止工作之前,我将microsoft . owen . security NuGet包升级到2.0.2,所以我尝试将它们恢复到2.0.1(这很痛苦),但它没有改变任何东西。我在项目上安装了WebActivator,并使用它来引导其他东西,但我已经在一个新的WebApplication模板上进行了测试,它在那里工作,所以我不认为这是罪魁祸首。

我还尝试删除我的启动类,并使用Visual Studio在添加新项目中使用OWIN启动类类型添加一个新的,并且也没有被调用。接下来,我尝试添加第二个Startup类,因为我知道如果定义了多个OwinStartup属性,它将抛出异常,但它没有抛出任何异常。

不知道还能试什么。任何想法吗?

更新

原来Resharper删除了对Microsoft.Owin.Host.SystemWeb的引用,当我使用它删除未使用的引用时。


确保在项目中安装了microsoft . owen . host . systemweb包。此包用于IIS托管应用程序的启动检测。有关更多信息,您可以参考这篇文章。


原来讨论的问题的另一种答案——Owin“不解雇”。在我的情况下,我花了几个小时认为它没有发射,因为无法设置断点。

在visual studio中调试OWIN启动时

IIS Express -运行“F5”将在OWIN启动代码上中断 IIS -运行“F5”将不会中断,直到OWIN(和global.asax)代码加载之后。如果您连接到W3P.exe,您将能够进入它。


如果您在调试Startup类中的代码时遇到了麻烦,那么我也遇到了这个问题——或者我认为我遇到了这个问题。代码正在触发,但我相信它发生在调试器附加之前,所以你不能在代码上设置断点,看看发生了什么。

您可以通过在Startup类的Configuration方法中抛出异常来证明这一点。


我有一个类似的问题,这和清算临时ASP。NET Files修复了它。希望这能帮助到一些人。


如果您从旧的MVC版本升级,请确保您没有

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

在你的web.config中。它将抑制调用启动逻辑。

相反,把它改成true

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

我知道你已经提到了这一点,但有时人们(比如我)不会阅读整个问题,而是直接跳到答案……

当我升级到MVC 5的时候,添加了这个,直到今天我才看到它。


我也有同样的问题。安装了Microsoft.Owin.Host.SystemWeb包,但在安装过程中,由于某种原因,NuGet无法添加dll作为引用。确保你的项目有这样的参考。如果没有,你可以尝试重新安装:

update-package Microsoft.Owin.Host.SystemWeb -reinstall

我有一个错误如下重新安装,但不知何故它工作:

系统调用失败。(异常来自HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))


在我的例子中,IIS应用程序池没有设置为v4。它是v2。

将appool更改为v4,一切正常。


首先添加OWIN认证类,然后在web中启用OWIN:AutomaticAppStartup密钥。这样的配置 现在它会发射


调试技巧

如果调试不起作用,请尝试使用IIS Express或尝试下面的本地IIS方法

使用本地IIS

由于某些原因,此方法可以调试此方法:

申请网页 附加到w3wp.exe进程 触摸网络。配置文件 申请网页

额外的小费

也许这样做会刷新缓存:

在网络上。将optimizeCompilations属性添加为false值 <编译调试="true"…optimizeCompilations = " false " > 运行网站 撤消web.config中的更改


在我的情况下,我的网站的输出路径被人改变了,IIS Express甚至没有加载OWIN,安装类当然不会被击中。在我将输出路径设置为“bin\”之后,它工作得很好。


当我将Owin添加到现有的web项目时,我也遇到了同样的问题。我最终发现问题是由于以下在网络。配置文件。

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

在这篇文章中,我把很多建议都搞砸了。

我有以下,但仍然不能降落在断点。抛出异常证明正在输入代码。

<appSettings>
...
  <add key="owin:AutomaticAppStartup" value="true" />
  <add key="owin:appStartup" value="SSOResource.Startup, SSOResource" />
...
</appSettings>

最后出于绝望,我看了project->属性,然后在WEB部分下,我还检查了NATIVE CODE复选框(ASP。NET应该已经检查过了)。

这终于帮我解决了问题。

注意:我使用的是Visual Studio 2017 Professional。


在我的例子中,这个microsoft . owen . host . systemweb包出现在项目中。

但是下面两个标签在web.config中不存在。

<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:appStartup" value="namespace.className.methodName" />

添加它们后,它工作顺利。


我不确定这是否还能帮助别人,但我已经做了上面所有的解决方案(以及其他一些帖子),但都无济于事。

什么固定的问题在我的结束是把一个反斜杠的RedirectUri值在web的结束。config(很疯狂,我知道!)RedirectUri是UseOpenIdConnectAuthentication中的参数。

所以,与其:

<add key="ida:RedirectUri" value="https://www.bogussite.com/home" />

这样做:

<add key="ida:RedirectUri" value="https://www.bogussite.com/home/" />

并更新了Azure应用程序设置上的回复URL。

这以某种方式使Startup按预期运行(可能清除了一些缓存),并且现在触发了断点。

仅供参考。我从这里建模代码: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>

因此,将各种dll构建到bin文件夹的子文件夹中(ifc。不会工作)。解决方案是将OutputPath的文本内容都更改为bin\。


对我来说,这是因为它们不在同一个命名空间中。在我删除我的AppStart从“项目。启动。并让它们同时包含Startup.cs和Startup.Auth.cs和project. auth。“Startup”命名空间,一切都恢复了正常。

我希望它能有所帮助!


对我来说,是我的网。配置了

<authorization>
  <allow users="?" />
</authorization>

为了迫使它回到欧文手中,我需要它是

<authorization>
  <deny users="*" />
</authorization>

如果您在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()的调用


我发现下面的文章很有帮助:

https://weblog.west-wind.com/posts/2015/Apr/29/Adding-minimal-OWIN-Identity-Authentication-to-an-Existing-ASPNET-MVC-Application#MinimalCodeSummary

在我的情况下,我必须设置以下Owin身份验证将工作而不是windows身份验证:

<system.web>   
    <authentication mode="None" />   
<system.web>

这招对我很管用:

add authentication mode="None"

<system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" />
      <authentication mode="None" /><!--Use OWIN-->
  </system.web>

如果您的解决方案中有多个主机使用相同的名称空间,请确保将它们放在单独的IISExpress端口上(并删除.vs文件夹并重新启动vs)。