J'ai un problème avec l'application Web ASP.NET Core exécutée sur IIS 10. Je développe une application à page unique avec AngularJS.
Le fichier index.html se charge parfaitement mais les requêtes back-end échouent avec le code d'erreur 404 sur le IIS 10. De Visual Studio avec IIS Express, cela fonctionne parfaitement).
Quelqu'un peut-il voir comment puis-je résoudre les demandes de backend?
Voici mon Program.cs
public static void Main(string[] args)
{
var Host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
Host.Run();
}
Et voici ma méthode Configure à partir de Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseIdentity();
// Custom middleware for Angular UI-Router
app.Use(async (context, next) =>
{
if (!Path.HasExtension(context.Request.Path.Value)
&& context.Request.HttpContext.Request.Headers["X-Requested-With"] != "XMLHttpRequest"
&& context.Request.Method.ToUpper() != "POST"
&& context.Request.Method.ToUpper() != "PUT"
&& context.Request.Method.ToUpper() != "DELETE")
{
await context.Response.WriteAsync(File.ReadAllText(env.WebRootPath + "/index.html"));
}
await next();
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "api/{controller=Home}/{action=Index}/{id?}");
});
}
Votre code travaille sur ma machine avec Kestrel. Une bonne étape de dépannage consiste à déterminer si le problème est lié à votre application ASP.NET Core ou à votre configuration d'hébergement IIS.
Essayez ceci depuis la racine de votre projet.
dotnet restore
dotnet run
Vous verrez quelque chose comme ceci:
Hosting environment: Production
Content root path: C:\MyApplicationPath
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
Dans votre navigateur, accédez aux deux URL suivantes. S'ils ne fonctionnent pas, quelque chose ne va pas avec votre application. S'ils fonctionnent, quelque chose ne va pas avec votre hébergement IIS.
localhost:5000 // you will see your index.html page
localhost:5000/api // you will see your default routes output
Dans mon cas, le problème était que mon contrôleur a levé une exception, donc le framework a essayé d'utiliser la page du gestionnaire d'exceptions qui n'était pas disponible, donc l'erreur 404, le contrôleur lui-même lançait 500 erreurs
Pour le bénéfice des chercheurs.
J'obtenais un 404 lors de l'utilisation d'IIS. J'avais suivi la procédure correcte pour la publication ( ici ) et le déploiement comme détaillé ici .
Il a fallu un certain temps pour comprendre, mais j'ai finalement trouvé la réponse cachée dans un article de blog de Rick Strahl .
Fondamentalement, lors de la création du pool d'applications, ainsi que de la définition de `` No Managed Code '', j'avais également besoin d'accéder aux paramètres avancés et de définir l'identité du pool d'applications sur `` Service réseau ''. C'était bien sous ApplicationPoolIdentity sur ma machine, mais pas sur une machine sur laquelle je me suis déployé.
Donc, pour plus de clarté, ma procédure complète était:
Pour créer un package:
Publier. Aurait pu utiliser la fonction de publication de VS, mais j'ai utilisé CLR via le gestionnaire de packages. La commande était:
dotnet publish -c Release -r win-x64 - autonome
J'ai dû utiliser le identifiant win-x64 car nous devons être compatibles avec Windows Server 2008 64 bits.
Déployer:
iisreset
. Vous ne devriez en avoir besoin que la première fois après avoir installé le runtime core dotnet.Une autre variante très stupide mais probable est que l'application a été déployée dans un dossier différent de ce que vous attendiez (ex: votre racine de serveur au lieu de sous-dossier) en raison de paramètres de déploiement erronés.