Pas de gestionnaire d'authentification est configuré pour gérer le régime: Automatique
J'ai mis à jour ASP.NET 5 cadre de bêta-8 paquets avec le RC ceux précédemment application de travail. Après je l'ai eu en cours d'exécution suivante erreur s'est produite dans le processus de démarrage:
InvalidOperationException: Pas de gestionnaire d'authentification est configuré pour gérer le régime: Automatique
Microsoft.AspNet.Http.L'authentification.Interne.DefaultAuthenticationManager.d__12.MoveNext()
var defaultPolicy =
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
services.AddMvc(setup =>
{
setup.Filters.Add(new AuthorizeFilter(defaultPolicy)); //Error occurs here
});
Si quelqu'un à eu le même problème, je vous remercie de votre idée ou la solution sur ce qui pourrait mal tourner. L'explication de cette exception est également apprécié.
De démarrage.cs
using Autofac;
using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNet.Authorization;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc.Filters;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.PlatformAbstractions;
using SuperUserMVC.Configuration;
using SuperUserMVC.Extensions;
using SuperUserMVC.GlobalModules;
using System;
namespace SuperUserMVC
{
public class Startup
{
public IConfigurationRoot Configuration { get; set; }
//Entry point for the application.
public static void Main(string[] args) => WebApplication.Run<Startup>(args);
public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
var builder = new ConfigurationBuilder()
.SetBasePath(appEnv.ApplicationBasePath)
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettingsBase>(Configuration.GetSection("AppSettingsBase"));
services.Configure<ConnectionString>(Configuration.GetSection("ConnectionString"));
services.AddSqlServerCache(cache =>
{
cache.ConnectionString = Configuration.Get<string>("ASPState:ConnectionString");
cache.SchemaName = Configuration.Get<string>("ASPState:Schema");
cache.TableName = Configuration.Get<string>("ASPState:Table");
});
services.AddSession(session =>
{
session.IdleTimeout = TimeSpan.FromMinutes(120);
});
//Only allow authenticated users.
var defaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
//Add MVC services to the services container.
services.AddMvc(setup =>
{
setup.Filters.Add(new AuthorizeFilter(defaultPolicy));
});
var builder = new ContainerBuilder();
builder.RegisterModule(new AutofacModule());
builder.Populate(services);
var container = builder.Build();
return container.Resolve<IServiceProvider>();
}
public void Configure(IApplicationBuilder app, IHttpContextAccessor httpContextAccessor)
{
//Catch unhandled exception in pipeline.
bool isProductionEnvironment = Configuration.Get<bool>("environmentVariables:isProductionEnvironment");
app.UseCustomUnhandledException(isProductionEnvironment, Configuration.Get<string>("defaultErrorPagePath"));
//Log requests.
app.UseVisitLogger(isProductionEnvironment);
//Session must be used before MVC routes.
app.UseSession();
//Configure the HTTP request pipeline.
app.UseCookieAuthentication(options =>
{
options.AuthenticationScheme = "Cookies";
options.LoginPath = new PathString("/Account/Login/");
options.AccessDeniedPath = new PathString("/Account/Forbidden/");
options.CookieName = "MyCookie";
options.AutomaticAuthenticate = true;
options.SessionStore = new MemoryCacheSessionStore();
});
AutoMapperInitializer.Init();
app.UseStaticFiles();
//Route configuration.
app.UseMvc(routes =>
{
routes.MapRoute(
name: "AreaDefault",
template: "{area:exists=Demo}/{controller=Home}/{action=Index}/{id?}"
);
routes.MapRoute(
name: "Default",
template: "{controller=Home}/{action=Index}/{id?}"
);
});
}
}
}
- J'ai juste commencé à se développer avec asp.net avec la dernière beta (créé un nouveau projet et puis amélioré un peu) et a également eu des problèmes après la mise à jour de RC, parce qu'ils ont changé diverses de BASE des choses. Malheureusement je n'ai pas trouvé de description, comment changer les projets existants pour être compatible. Alors... j'ai ensuite recréé mon projet à partir de zéro à partir d'un nouveau modèle, pour être entièrement compatible. Que le RC est pris en charge pour la production de MS, je pense (je l'espère), il ne sera de tels changements dans l'avenir (version T1 2016).
Vous devez vous connecter pour publier un commentaire.
Essayez de définir
options.AutomaticChallenge = true;
dans vos options de cookies et cela devrait fonctionner.options.AutomaticAuthentication
a été divisé enoptions.AutomaticAuthenticate
etoptions.AutomaticChallenge
. Si le dernier est laissé àfalse
, une exception est levée, car aucune authentification middleware gère le défi appliquée par l'autorisation de filtre.J'espère que cela va aider quelqu'un d'autre juste parce que j'ai passé beaucoup de temps à traiter avec cette erreur, même si j'avais mis
AutomaticChallenge = true
.S'avère, vous obtiendrez la même erreur si vous mettez
app.UseIdentity();
aprèsapp.UseMvc(routes => ...)
. Maintenant que je connais la réponse, c'est évident. C'est parce que tout ce middleware qui se passe dans l'ordre que vous l'ajouter.Ce qui provoque le "Pas de gestionnaire d'authentification est configuré" erreur:
Ce n'est pas la cause de l'erreur:
Mettre cela sur Configurer la méthode.
Configure
, pasConfigureServices
.Le problème a été résolu pour moi en vous assurant que les cookies régime a toujours été nommé là où il a été référencée. par exemple:
Et lors de l'interaction avec l'authentification de middleware. par exemple:
Si vous utilisez
app.UseIdentity();
et quelques autres de connexion middleware tels queUseFacebookAuthentication
assurez-vous queapp.UseFacebookAuthentication()
est APRÈSapp.UseIdentity();
.une autre possibilité est de manquer le paramétrage suivant pour Configurer
Alors que c'est tentant de placer beaucoup de nos paramètres de configuration à l'intérieur de la
startup.cs
fichier, il semble que la façon de faire les choses est de définir vosapp.UseCookieAuthentication()
- sans options - dans lestartup.cs
fichier, puis placer tous les "options", et d'autres détails dans un fichier séparé.Un peu comme ce que nous faisions avec la façon dont les
Global.asax
fichier avait des pointeurs vers lesApp_Start
dossier de fichiers Asp.Net vBefore.J'ai souffert douleur semblable, tout en essayant de configurer EF/Sql dans la
startup.cs
, et par le déplacement de toutes les "options" à l'extérieur destartup.cs
les choses travaillé beaucoup mieux.AUSSI: prendre note de la Fredy Wenger commentaire à votre question, qui souligne le "renommage" de nombreuses des espaces de noms à partir de v-8beta à v -RC1-finale.