首页 > 解决方案 > 向asp.net web api项目中手动创建的startup.cs类添加配置

问题描述

我是 asp.net 的新手,从 Visual Studio 中的一个 Web API 项目开始。我想将这些 Web API 用于 Angular 应用程序。为此,我必须启用 CORS 并配置 SignalR

In the ConfigureServices method, we are adding SignalR to the IService collection. And in a Configure 
method, we are adding SignalR to the request pipeline by pointing to our ChartHub with the provided /chart path.

参考 - “https://code-maze.com/netcore-signalr-angular/”。

我的 Web API 项目中没有Startup.cs文件,所以我添加了一个OWIN startup class. 这个类有一个Configuration方法,但没有ConfigureServiceor Configure。我对如何在startup.cs. 有人可以帮助我如何在 startup.cs 类中添加这些配置吗?

标签: c#asp.netasp.net-web-apistartup.net-framework-version

解决方案


您需要在项目的根目录中添加 Startup 类,并用 OwinStartup 属性对其进行标记,以指示要用于自动设置的类。

然后,您需要实现配置方法,您可以在其中设置身份验证、COR、Signalr 等内容。

您还可以通过 Visual Studio 中的添加项添加 Owin 启动类。它将为您添加基本设置到配置。https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-startup-class-detection#create-an-aspnet-web-app-using-owin-startup

[assembly: OwinStartup(typeof(Example.Web.Startup))]
namespace Example.Web
{
    public class Startup
    {
        private static CorsOptions _corsOptions = new CorsOptions
        {
            PolicyProvider = new CorsPolicyProvider
            {
                PolicyResolver = context =>
                {
                    var policy = new CorsPolicy();
                    foreach (string domain in ConfigHelper.AllowedCorsDomains.Split(','))
                    {
                        policy.Origins.Add(domain);
                    }

                    policy.AllowAnyMethod = true;
                    policy.AllowAnyHeader = true;
                    policy.SupportsCredentials = true;
                    return Task.FromResult(policy);
                }
            }
        };

        public void Configuration(IAppBuilder app)
        {
            app.UseCors(_corsOptions);
            app.MapSignalR();

            AccessTokenFormat = new SecureDataFormat<AuthenticationTicket>(new TicketSerializer(), app.GetDataProtectionProvider().Create("ASP.Net Identity"), new Base64TextEncoder());

            
            OAuthBearerAuthenticationOptions = new OAuthBearerAuthenticationOptions()
            {
                AccessTokenFormat = AccessTokenFormat
            };

            if (provider != null)
            {
                OAuthBearerAuthenticationOptions.Provider = provider;
            }

            app.UseOAuthBearerAuthentication(OAuthBearerAuthenticationOptions);
        }
    }
}

推荐阅读