ASP.NET Web Api - Startup.cs文件不存在

67

我有一个ASP.NET Web Api解决方案,其中不包含Startup.cs类。我认为这是因为该解决方案不是作为MVC解决方案创建的。

所有启动代码都在Global.asax.cs文件中定义,如下所示。

public class Global : HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
}

不过,现在我希望能够支持OAuth,并且我找到的所有文档都是基于具有以下类的Startup.cs

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
    }
}

如果我在我的解决方案中添加这个新类,解决方案还会继续工作吗?

这会与Global.asax.cs类产生任何冲突吗?

编辑:在我添加了Startup.cs类之后,我无法触发其中添加的断点...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Owin;
using Owin;

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

namespace MyGame
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
        }
    }
}

有什么想法吗?


3
请确保在启动类上方添加了 [assembly: OwinStartup(typeof(AuthorizationServer.Startup))] - Curiousdev
2
我已经添加了它,但当我运行应用程序时仍然没有触发断点。 - user3587624
@user3587624 我也有同样的问题 - 你解决了吗? - Lukas Hieronimus Adler
3
当我在我的解决方案中添加了对Microsoft.Owin.Host.SystemWeb的引用后,我的问题消失了。 - user3587624
这个回答是否解决了你的问题?OWIN Startup Class Missing - cracker
5个回答

53

如果您已安装Owin包,则可以使用以下代码简单创建启动类:

在此输入图片描述


3
这是适用于VS 2015的正确答案 - 它会为您生成所有必要的代码。 - Adam W
2
请确保已安装Microsoft.Owin.Host.SystemWeb NuGet包,否则它将无法工作。 - uriz

45

Startup.cs是OWIN授权包的一部分。如果没通过NuGet添加此包,我不能保证它能正常工作。但根据这个答案,它可能会在特定环境下工作。

https://dev59.com/UmIj5IYBdhLWcg3wnmXA#24678109

简短回答:如果你已经用NuGet安装了Microsoft.Owin.Security.OAuth,那就没问题了。否则你需要安装它。

更新: 为了让MVC调用startup中的Configuration方法,你还需要从NuGet安装Microsoft.Owin.Host.SystemWeb包。Web.config不需要进行任何特殊配置,IIS会自动检测Owin主机并加载它。


1
实际上,我已经添加了Startup.cs和Startup.Auth.cs文件,并且在ConfigurAuth(app)行中没有出现任何错误。我在命名空间上方添加了程序集([assembly: OwinStartup(typeof(MyGames.Startup))])... 有什么想法吗? - user3587624
1
我已经安装了这个:<package id="Microsoft.Owin.Security.OAuth" version="3.0.1" targetFramework="net46" />,以及其他许多类似Jwt、Active Directory等的包。 - user3587624
我有一个针对Microsoft.Owin的,另一个针对Microsoft.Owin.Security的,还有一个针对Microsoft.Owin.Security.OAuth等等...但是没有针对Owin本身的。 - user3587624
4
补充一下,在添加了对Microsoft.Owin.Host.SystemWeb的引用之后,问题消失了。 - user3587624
谢谢,直到添加了Microsoft.Owin.Host.SystemWeb包才发现Startup.cs没有被调用。 - Obakeng Molebatsi
显示剩余5条评论

8
你可以添加自己的启动类,但需要确保Owin能够识别它。有几种方法可以实现,但如果你想使用一个启动类,那么你需要使用OwinStartup属性。
例如:
[assembly: OwinStartup(typeof(MyNamespace.MyStartupClass))]

1
我遇到了DLL没有被重新编译的问题。尝试删除临时ASP.NET文件夹中的内容(通常在“Appdata/Local/Temp/Temporary ASP.NET Files”中),然后删除项目的bin和obj文件夹,以强制重新编译所有内容。 - SharpLizard
5
在这种情况下,添加Microsoft.Owin.Host.SystemWeb后问题得以解决。 - user3587624

4

在我去掉Web.config文件(根目录下)中的这行代码之前,我的Startup.cs无法运行

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

1
谢谢您。我花了一整天的时间来试图解决这个问题,而您的回答就是答案。 - dylanT
这对我来说也是这样。 - Darth Scitus

1

是的。首先,你需要从你的web.config文件中移除以下这行。

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

只有这样它才会调用 startup.cs 方法。


这似乎是一个关于旧问题的模棱两可的回答。 - Jason
@Jason,实际的代码因缺少格式而被隐藏。 - Laurenz Albe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接