Nous avons deux sites Web sur IIS pour angular_client et web_api, le pack d'hébergement est installé et l'autorisation pour les utilisateurs tels que IUSR, Network, Network Service et Everyone, est déjà accordée.
La navigation vers chaque site fonctionne séparément, c'est-à-dire que dans l'API, l'appel http: // localhost: 51975/api/user , donne la liste de tous les utilisateurs.
Le problème est que Angular ne parvient pas à communiquer avec l'API pour authentifier les utilisateurs:
OPTIONS http://localhost:51975/api/user/authenticate net::ERR_CONNECTION_REFUSED
J'ai essayé de modifier l'IP associée à l'API en une IP statique, c'est-à-dire 10.1.xy, puis j'ai dit à angular d'appeler http: //10.1.xy: 51975/api/user/authenticate à la place.
Dans l'API, j'ai activé l'envoi du journal au navigateur et également au dossier des journaux, le seul journal qu'il affiche est:
Hosting environment: Production
Content root path: C:\inetpub\wwwroot\api
Now listening on: http://127.0.0.1:39834
Application started. Press Ctrl+C to shut down.
Application is shutting down...
Pourquoi écoute-t-il sur un autre port plutôt que sur celui associé 51975?
Pourquoi la connexion est refusée de Angular à l'API?
Pourquoi l'application se ferme-t-elle?
Est-ce la bonne approche pour ce faire?
MISE À JOUR 1
Sur le serveur [~ # ~] uniquement [~ # ~], l'application fonctionne correctement, avec les configurations suivantes:
L'angulaire est sur 10.x.y.z: 4200,
API 10.x.y.z: 51975,
Le problème est que lorsque j'essaie d'utiliser l'IP publique ou mon nom d'hôte, je ne peux toujours accéder qu'à angular mais pas à l'API Web, j'ai essayé d'attribuer le nom d'hôte pour l'api, et ça ne marche pas encore!
MISE À JOUR 2
J'ai également autorisé les deux ports 4200 et 51975 sur mon domaine de nom d'hôte.
MISE À JOUR 3
J'héberge l'API Web sur IIS, l'API et Angular sont sur le même serveur mais sur des sites Web différents.
J'ai supprimé la déclaration sur CORS corrigé, car j'ai toujours un avertissement sur la console du navigateur, voici l'erreur:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://{public IP}:51975/api/user/authenticate. (Reason: CORS request did not succeed).[Learn More]
Object { headers: {…}, status: 0, statusText: "Unknown Error", url: "http://{public IP}:51975/api/user/authenticate", ok: false, name: "HttpErrorResponse",
message: "Http failure response for http://{public IP}:51975/api/user/authenticate: 0 Unknown Error", error: error }
OPTIONS Http failure response for http://{public IP}:51975/api/user/authenticate net::ERR_CONNECTION_TIMED_OUT
A propos de CORS, voici ma configuration, cela fonctionne très bien localement:
//In ConfigureServices method
services.AddCors();
//In Configure method
app.UseCors(options => options.WithOrigins("http://localhost:4200/").AllowAnyMethod().AllowAnyHeader());
Je vous remercie
Assurez-vous d'avoir créé les en-têtes appropriés dans votre demande d'api à partir du projet Angular.
comme:
createHeader() {
let reqheaders = new HttpHeaders();
reqheaders.append('Access-Control-Allow-Methods', 'GET, POST, DELETE, PUT');
reqheaders.append('Access-Control-Allow-Origin', '*');
let reqHeader = { headers: reqheaders };
return reqHeader;
}
Côté noyau .net:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors(b => b.WithOrigins("http://localhost:8033", "http://localhost:8034","*").AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
// app.UseCors("corspolicy");
//app.UseSignalR(routes =>
//{
// routes.MapHub<RealTimeHub>("/api/chat");
//});
app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
}
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.WithOrigins("localhost").AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors("CorsPolicy");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
app.UseAuthentication();
}