0

J'essaie de mettre en place une solution Visual Studio 2017 ASP.NET Core 1.1 pour travailler avec un SPA Angular2.Comment calculer correctement les URL des méthodes de l'API Web dans TypeScript dans ASP.NET Core 1.1. Solution?

J'ai créé un échantillon csproj en utilisant les commandes suivantes:

npm install -g yo generator-aspnetcore-spa 
yo aspnetcore-spa 

puis ouvert dans Visual Studio 2017 Community Edition. Lorsque vous utilisez IIS Express 10, il fonctionne correctement (routage, actualisation, appels API Web). Cependant, lors du déploiement dans une application Web sous IIS, les appels API Web échoue en raison de chemin ne contenant pas de nom de l'application Web:

fichier fetchdata.component.ts définit extraction de données comme suit:

constructor(http: Http) { 
    http.get('/api/SampleData/WeatherForecasts').subscribe(result => { 
     this.forecasts = result.json() as WeatherForecast[]; 
    }); 
} 

Cela fonctionne bien dans IIS Express, le chemin http://localhost:port/api/SampleData/WeatherForecasts est correct. Toutefois, cela ne fonctionne pas sous IIS parce que le chemin correct est:

http://localhost:port/ApplicationName/api/SampleData/WeatherForecasts 

nom de l'application Coder en dur dans les travaux URL, mais ce n'est pas une solution viable.

J'ai changé _Layout.cshtml à la base correctement réglé (chemin), mais il ne fonctionne pas: le chemin est

<!DOCTYPE html> 
@{ 
    string basePath = Url.Content("~"); 
} 
<html> 
    <head> 
     <meta charset="utf-8" /> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
     <title>@ViewData["Title"] - WebApplicationBasic</title> 
     <base href="@basePath" /> 
     <link rel="stylesheet" href="~/dist/vendor.css" asp-append-version="true" /> 
    </head> 
    <body> 
     Base path: @basePath 

     @RenderBody() 

     @RenderSection("scripts", required: false) 
    </body> 
</html> 

Si je comprends bien, supposé être relatif au fichier tsconfig.json qui est placé à l'extérieur Dossier wwwroot. Cela expliquerait pourquoi tous les chemins de js générés depuis ts ne prennent pas en compte le dossier de l'application web.

Question: Comment puis-je spécifier dynamiquement le préfixe d'URL pour les appels avec des fichiers TypeScript?

Répondre

1

Vous devez utiliser un chemin relatif au lieu du chemin absolu. Supprimez simplement le / de vos appels http.get(...).

Vous avez déjà configuré correctement le chemin de base (ce qui fonctionne également plus facilement en faisant <base href="~/"/>). Cela garantira que le chemin de base est toujours utilisé comme point de départ pour les URLs relatives. Cela s'applique également aux appels ajax. Tous les nouveaux navigateurs prennent déjà en charge <base href=""/>. Voir aussi mon ancien poste here.

+0

Oui, cela fonctionne. Je vous remercie! J'ai eu deux erreurs dans mon code: '' devrait être 'ou' 'et supprimer l'extra '/' comme vous l'avez mentionné. – Alexei