2017-07-07 4 views
0

Ich experimentiere mit verschiedenen Möglichkeiten, eine Angular CLI App mit .NET Core Authorization zu sichern..NET Core HTML-Datei außerhalb von wwwroot kann keine JS-Dateien laden

Um es so sicher wie möglich zu gestalten, möchte ich vermeiden, dass alle Angular CLI-Ausgabedateien öffentlich verfügbar sind, und sie im Standardordner "dist" behalten, der von der CLI vorkonfiguriert wurde.

kann ich die index.html von einem autorisierten Controller laden, indem Sie einen PhysicalFileResult Rückkehr ...

public IActionResult Index() 
{ 
    return PhysicalFile(Path.Combine(Directory.GetCurrentDirectory(), "dist", "index.html"),"text/HTML"); 
} 

Aber ich 404s auf alle der bundle.js-Dateien, wenn die Seite geladen wird.

Ist es möglich, die App auf diese Weise zu bedienen, ohne die statische Datei-Middleware einzubeziehen oder die Dateien öffentlich verfügbar zu machen (vorzugsweise ohne den src für jede gebündelte js-Datei in index.html manuell ändern zu müssen)?

Antwort

0

Werfen Sie einen Blick auf diese Artikel von den asp.net Kern docs (Auszug auch weiter unten): https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files#static-file-authorization


enter image description here

+0

ich das las, die mich dazu veranlasst PhysicalFile() zu lernen, zu verwenden, die eine PhysicalFileResult zurückgibt. https://medium.com/@tanaka_733/static-file-authorization-in-asp-net-core-mvc-26c1069073c1 Es funktioniert, und ich kann die Datei index.html von irgendwo im Dateisystem aber die HTML-Datei liefern Die JavaScript-Dateien, die sich im selben Verzeichnis befinden, können nicht geladen werden. Ich denke, es sollte eine Möglichkeit geben, ein ganzes Verzeichnis von der Controller-Aktion aus zu bedienen. – David

0

Einfach Ihre Genehmigung Middleware vor dem statischen ein.

// has to be first so user gets authenticated before the static middleware is called 
app.UseIdentity(); 

app.Use(async (context, next) => 
{ 
    // for pathes which begin with "app" check if user is logged in 
    if(context.Request.Path.StartsWith("app") && httpContext.User==null) 
    { 
     // return "Unauthorized" 
     context.Response.StatusCode = 401; 
     return; 
    } 

    // If user is logged in, call next middleware 
    await next.Invoke(); 
}); 

app.UseStaticFiles(); 
Verwandte Themen