我让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的引用。
答案 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
由于某种原因,此方法可以调试此方法:
额外提示
也许这样做会刷新缓存:
在web.config中,使用false值添加optimizeCompilations属性
&lt; compilation debug =“true”... optimizeCompilations =“false”&gt;
运行网站
答案 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)
我发现以下文章非常有帮助:
就我而言,在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>
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 键,如 现在它将开火