我试图在一个新的.Net Core类库项目中添加OWIN启动类。我已经安装了Microsoft.AspNetCore.Owin包,但在“添加新项”向导中仍然看不到创建OWIN启动类的选项。在早期的.Net类库中还存在该选项。在.Net Core类库中是否有所不同?
我的目标是为我的SingalR hub创建一个单独的项目,并通过引用它从任何地方使用。
我试图在一个新的.Net Core类库项目中添加OWIN启动类。我已经安装了Microsoft.AspNetCore.Owin包,但在“添加新项”向导中仍然看不到创建OWIN启动类的选项。在早期的.Net类库中还存在该选项。在.Net Core类库中是否有所不同?
我的目标是为我的SingalR hub创建一个单独的项目,并通过引用它从任何地方使用。
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace MyClassLibrary
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}
}
我曾经创建了一个继承自Microsoft.AspNetCore.SignalR.Hub<IChatClient>
的ChatHub
。
所有组件都位于单独的 .net 标准库中。
IChatClient
看起来像这样(用于类型安全):
public interface IChatClient
{
Task ReceiveChatMessage(string user, string message, DateTime sentAt, bool isMarkedAsImportant);
Task ReceiveChatActivity(string user, Activity activity, DateTime sentAt);
}
最终我在一个ASP.net核心项目中使用了ChatHub
,其中hub在Startup
中进行了如下配置:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseCors(builder =>
{
builder.WithOrigins("https://localhost:3000")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
IdentityModelEventSource.ShowPII = true;
}
else
{
app.UseGlobalExceptionHandler();
app.UseHttpsRedirection();
app.NwebSecApiSetup();
}
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHub<ChatHub>("/api/chat");
endpoints.MapHub<EventHub>("/api/events");
});
}
此外,我在ConfigureServices
方法中为SignalR配置了更多内容:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddControllers().AddControllersAsServices();
services.AddHttpContextAccessor();
services.AddConnections();
services.AddSignalR(options =>
{
options.EnableDetailedErrors = true;
})
.AddNewtonsoftJsonProtocol();
...
}
我想你也可以在其他项目中轻松使用这样的集线器。