public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
this.Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
/// <summary>
/// Используется для доступа к контексту SignalR хаба из любого класса
/// IHubContext context = Startup.ConnectionManager.GetHubContext<CallQueueHub>();
/// context.Clients.All.someMethod();
/// </summary>
//public static IConnectionManager ConnectionManager;
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
// Add framework services.
services.AddMvc();
services.AddAuthorization(options =>
{ // доступ открыт только внутренним пользователям - специалистам.
// https://docs.asp.net/en/latest/security/authorization/policies.html
options.AddPolicy("OnlyEmployee", policy =>
{
policy.RequireAuthenticatedUser();
policy.Requirements.Add(new OnlyEmployeeRequirement());
});
});
services.AddSignalR(options =>
{
options.Hubs.EnableDetailedErrors = true;
});
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<IUserIdentityAccessor, UserIdentityAccessor>();
services.AddSingleton<IAuthorizationHandler, OnlyEmployeeRequirementHandler>();
services.AddSingleton<HttpClientProvider>();
//services.AddSingleton<CallQueueHub>();
services.AddOptions(); // https://docs.asp.net/en/latest/fundamentals/configuration.html
services.Configure<AppSettings>(this.Configuration.GetSection("AppSettings"));
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider serviceProvider)
{
loggerFactory.AddConsole(this.Configuration.GetSection("Logging")); // TODO: куда логи складываются? Создалось из шаблона. Надо исследовать.
loggerFactory.AddDebug();
//ConnectionManager = serviceProvider.GetService<IConnectionManager>();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseWebSockets();
//app.UseSignalR<RawConnection>("/raw-connection");
app.UseSignalR();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
Как подключить к ASP Core проекту SignalR?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Необходимо скрытно запускать консольное приложение(тестирую на cmd) Использую такой код:
Подскажите есть ли метод в MailKit который позволяет получить сообщение без вложения, но что бы информация, true or false - есть вложение или нет, была?