Après avoir essayé d'activer owin & AspNet Identity dans mon projet Web Api (dans VS 2013 + .Net 4.5.1), l'erreur suivante apparaît dans chaque demande valide ou non valide (demande avec un contrôleur inexistant):
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
No OWIN authentication manager is associated with the request.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace>
at System.Web.Http.Owin.PassiveAuthenticationMessageHandler.SuppressDefaultAuthenticationChallenges(HttpRequestMessage request) at System.Web.Http.Owin.PassiveAuthenticationMessageHandler.<SendAsync>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.HttpServer.<SendAsync>d__0.MoveNext()
</StackTrace>
</Error>
Comme j'ai vérifié en mode débogage, aucune exception n'est gérée aussi! De plus, j'ai réalisé que Configuration
dans Startup
la classe n'est jamais appelée (en fait, elle n'est jamais interceptée par le débogueur). voici le code pour le démarrage:
[Assembly: OwinStartup(typeof(bloob.bloob.Startup))]
namespace bloob.bloob
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
}
}
}
J'ai enfin trouvé le problème! Après avoir comparé ligne par ligne avec un projet nouvellement créé et ne trouvant aucune différence, j'ai vérifié les références des deux projets et oui! ... Tout le problème venait d'un paquet manquant:
Microsoft.Owin.Host.SystemWeb
Je ne sais pas pourquoi ce paquetage manque dans la phase d'installation du paquet, mais ce qui est étrange, c'est pourquoi aucune exception de génération n'a été levée. ou aucune erreur de référence dll?
J'ai initialement créé le projet avec authentification, mais j'ai ensuite décidé de le désactiver. Je devais enlever cela dans le WebApiConfig.cs
fichier. Assurez-vous de l'avoir si vous souhaitez activer l'authentification.
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
Mon cas, il a échoué depuis ces paramètres dans web.config. J'espère que cela aide quelqu'un à l'éviter.
<appSettings>
<add key="owin:AutomaticAppStartup" value="false" />
</appSettings>
J'ai eu le même problème. Le paquet n'apparaissait pas dans le gestionnaire de paquets NuGet. J'ai ajouté une référence dans packages.config:
<package id="Microsoft.Owin.Host.SystemWeb" version="2.1.0" targetFramework="net45" />
Et référence dans le fichier de projet (xxx.csproj):
<Reference Include="Microsoft.Owin.Host.SystemWeb">
<HintPath>..\packages\Microsoft.Owin.Host.SystemWeb.2.1.0\lib\net45\Microsoft.Owin.Host.SystemWeb.dll</HintPath>
</Reference>
si vous n'avez pas réellement besoin d'OWIN, vous pouvez simplement le désinstaller.
une façon de le faire consiste à désinstaller chaque bibliothèque OWIN dans Nuget Manager, l'ordre étant dicté par leurs dépendances.
après cela, vous n’avez plus besoin de code ou de configuration lié à OWIN. cela a fonctionné mieux pour moi puisque j'utilise Windows auth.
Changer le owin:AutomaticAppStartup
clé pour true
dans Web.config corrige cela pour moi, c’est-à-dire changez-le de:
<appSettings>
<add key="owin:AutomaticAppStartup" value="false" />
</appSettings>
pour ça:
<appSettings>
<add key="owin:AutomaticAppStartup" value="true" />
</appSettings>