OwinStartup没有开火

时间:2013-11-25 21:45:17

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

我让OwinStartup配置代码完美运行,然后它停止工作。不幸的是,我不确定我做了什么让它停止工作并且很难搞清楚它。

为了确保我有基本知识,我加倍检查以确保我有

[assembly:OwinStartup(typeof(WebApplication.Startup))] 
正确分配

属性并确保我没有owin的appSetting:设置为false的AutomaticAppStartup因此我将一个设置为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删除了对Microsoft.Owin.Host.SystemWeb的引用。

22 个答案:

答案 0 :(得分:681)

确保您已在项目中安装了Microsoft.Owin.Host.SystemWeb个包。 IIS托管应用程序中的启动检测需要此程序包。有关详细信息,请参阅this文章。

答案 1 :(得分:53)

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

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

web.config中。它将禁止调用启动逻辑。

而是将其更改为true

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

我意识到你已经提到了这一点,但有时人们(像我一样)不会读完整个问题,只是跳到答案......

沿线的某个地方 - 当我升级到MVC 5时,这个已经添加了,直到今天我才看到它。

答案 2 :(得分:48)

讨论的原始问题的替代答案 - Owin&#34;没有解雇。&#34;在我的情况下,我花了好几个小时认为它没有因为无法设置断点而被解雇。

在visual studio中调试OWIN启动时

  • IIS Express - 运行&#34; F5&#34;将打破OWIN启动代码

  • IIS - 正在运行&#34; F5&#34; 不会中断,直到加载OWIN(和global.asax)代码。如果您附加到W3P.exe,您将可以进入它。

答案 3 :(得分:24)

如果您在调试Startup课程中的代码时遇到问题,我也遇到了这个问题 - 或者我认为我做过了。代码正在解雇,但我相信它是在调试器附加之前发生的,因此您无法在代码上设置断点并查看发生的情况。

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

答案 4 :(得分:14)

调整提示

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

使用本地IIS

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

  1. 申请网页
  2. 附加到w3wp.exe进程
  3. 触摸web.config文件
  4. 申请网页
  5. 额外提示

    也许这样做会刷新缓存:

    1. 在web.config中,使用false值添加optimizeCompilations属性

      &lt; compilation debug =“true”... optimizeCompilations =“false”&gt;

    2. 运行网站

    3. 撤消web.config中的更改

答案 5 :(得分:12)

我遇到了类似的问题,并清除了临时ASP.NET文件修复它。希望这有助于某人。

答案 6 :(得分:11)

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

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

我在重新安装时遇到如下错误,但不知怎的,它有效:

  

系统调用失败。 (HRESULT的例外情况:0x80010100   (RPC_E_SYS_CALL_FAILED))

答案 7 :(得分:2)

就我而言,IIS应用程序池未设置为v4。这是v2。

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

答案 8 :(得分:1)

在我的情况下,我的网站的输出路径被某人更改,IIS Express甚至没有加载OWIN,并且安装程序类当然不会被命中。将输出路径设置为“bin”后,效果很好。

答案 9 :(得分:1)

当我将Owin添加到现有的Web项目时,我遇到了同样的问题。我最终发现问题是由于web.config文件中的以下内容。

<assemblies>
  <remove assembly="*" />
  <add assembly="System.Web.Mvc" />
  <add assembly="System.Web.WebPages" />

   ...

</assemblies>

删除程序集=&#34; *&#34;导致了这个问题。当我删除此行时,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>

答案 10 :(得分:1)

在我的例子中,这个Microsoft.Owin.Host.SystemWeb包存在于项目中。

但是web.config中没有两个标签。

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

添加后,它可以顺利运行。

答案 11 :(得分:1)

就我而言,我的web.config有

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

要强迫它回归Owin,我需要它

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

这对我有用:

添加身份验证模式=“无”

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

答案 14 :(得分:0)

我发现以下文章非常有帮助:

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>

答案 15 :(得分:0)

我认为有些人想要达到的目标是,如果您想以编程方式使OWIN服务器“栩栩如生”,您将称呼这样的事情:

using Microsoft.Owin.Hosting;

    IDisposable _server = WebApp.Start<StartupMethod>("http://+:5000"); 
              // Start Accepting HTTP via all interfaces on port 5000

进行此调用后,您将在调试器中看到对StartupMethod()的调用

答案 16 :(得分:0)

如果您在IIS托管中看到此问题,但在F5调试时没有看到,请尝试在IIS中创建新应用程序。

这为我修好了。 (Windows 10)最后我删除了&#34;坏&#34; IIS应用程序并重新创建一个具有相同名称的相同应用程序。

答案 17 :(得分:0)

对我而言,这是因为它们不在同一名称空间中。从&#34; project.Startup.AppStart&#34;中删除我的AppStart后让他们将Startup.cs和Startup.Auth.cs与&#34; project.Startup&#34;名称空间,一切都恢复正常。

我希望它有所帮助!

答案 18 :(得分:0)

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\

答案 19 :(得分:0)

我不确定这是否仍会对某人有所帮助,但我已完成上述所有解决方案(以及其他一些帖子)无济于事。

解决这个问题的原因是在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应用设置上的回复网址。

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

FYI。我从这里建模我的代码:https://github.com/microsoftgraph/aspnet-connect-sample

答案 20 :(得分:0)

我在这篇文章中提出了很多建议。

我有以下但仍无法落在破发点。抛出异常证明代码正在输入。

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

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

最终为我修好了。

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

答案 21 :(得分:-3)

首先添加OWIN Auth类,然后在web.config中启用 OWIN:AutomaticAppStartup 键,如 现在它将开火