2017-10-02 2 views
0

Wenn ich meine ASP.net Core 2 App (Web API) lokal auf IIS Express ausführen, scheinen statische Ressourcen zu funktionieren, aber wenn bereitgestellt Iis 8 bekomme ich einen 404 Zugriff versuchen. Hier ist mein Setup, lokal habe ich die Ressource in wwwroot während startup.cs, program.cs sind ein Verzeichnis höher.Asp.net Core 2 - Statische Dateien funktionieren nicht auf prod, aber sie funktionieren über Iis Express

Bei der Bereitstellung werden alle kompilierten/veröffentlichten DLLs und die Ressource auf der Website wwwroot bereitgestellt. Jetzt arbeiten meine apis feinen onlie, zum Beispiel habe ich eine Route definiert wie

[HttpGet] 
[Route("api/misc/categories")] 
public IActionResult Categories() 
{ 
    return Ok(DbContext.Categories); 
} 

so ruft http://cryptocal.imetasoft.com/api/misc/categories kehrt die Kategorien, wie es sollte aber http://cryptocal.imetasoft.com/index.html gibt einen 404, obwohl die index.html und cryptocal.dll sind beide in der wwwroot auf meinem webserver (prod)

Ich glaube, ich habe alles richtig eingerichtet. I gegeben, um ein NuGet Paket Microsoft.AspNetCore.StaticFiles v2.0

CSPROJ Inhalt

<Project Sdk="Microsoft.NET.Sdk.Web"> 

    <PropertyGroup Label="Globals"> 
    <SccProjectName>SAK</SccProjectName> 
    <SccProvider>SAK</SccProvider> 
    <SccAuxPath>SAK</SccAuxPath> 
    <SccLocalPath>SAK</SccLocalPath> 
    </PropertyGroup> 

    <PropertyGroup> 
    <TargetFramework>netcoreapp2.0</TargetFramework> 
    </PropertyGroup> 

    <ItemGroup> 
    <Folder Include="wwwroot\" /> 
    </ItemGroup> 

    <ItemGroup> 
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" /> 
    <PackageReference Include="morelinq" Version="2.7.0" /> 
    </ItemGroup> 

    <ItemGroup> 
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> 
    </ItemGroup> 

</Project> 

Program.cs keine Änderungen (der Standardwert von generierten Vorlage)

Microsoft.AspNetCore verwendet; mit Microsoft.AspNetCore.Hosting;

namespace CryptoCal 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      BuildWebHost(args).Run(); 
     } 

     public static IWebHost BuildWebHost(string[] args) => 
      WebHost.CreateDefaultBuilder(args) 
       .UseStartup<Startup>() 
       .Build(); 
    } 
} 

Startup.cs

using Microsoft.AspNetCore.Builder; 
using Microsoft.AspNetCore.Hosting; 
using Microsoft.Extensions.Configuration; 
using Microsoft.Extensions.DependencyInjection; 
using CryptoCal.Models; 
using Microsoft.EntityFrameworkCore; 
using CryptoCal.Support; 

namespace CryptoCal 
{ 
    public class Startup 
    { 
     public Startup(IConfiguration configuration) 
     { 
      Configuration = configuration; 
     } 

     public IConfiguration Configuration { get; } 

     // This method gets called by the runtime. Use this method to add services to the container. 
     public void ConfigureServices(IServiceCollection services) 
     { 
      services.AddDbContext<CryptoDateContext>(options => options.UseSqlServer(Configuration.GetConnectionString("CryptoCalDatabase"))); 
      services.Configure<GeneralSettings>(Configuration.GetSection("GeneralSettings")); 
      services.AddMvc(); 
     } 

     // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
     public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
     { 
      if (env.IsDevelopment()) 
      { 
       app.UseDeveloperExceptionPage(); 
      } 
      app.UseDefaultFiles(); 
      app.UseStaticFiles(); 
      app.UseMvc(x => 
      { 

      }); 
     } 
    } 
} 
+0

Ich würde die DLL-Dateien und Ihre statischen Dateien nicht erwarten, im selben Ordner sein , wenn du das so meintest, wie du es ausgedrückt hast. Bei ordnungsgemäßer Bereitstellung befinden sich die DLLs wahrscheinlich im Stammverzeichnis und die statischen Dateien befinden sich im Unterordner wwwroot. Vielleicht hast du das gemeint? – k3davis

+0

Beim Erstellen von Websites in websitepanel wird der Root, den er für den physischen Pfad von iis verwendet, auf wwwroot gesetzt (ich denke, so macht es das Ganze). In Wirklichkeit ist mein "root" meiner Site ein Ordner namens wwwroot und innerhalb dessen werde ich einen anderen wwwroot für den Core haben. Dies ist meine erste Kernbereitstellung und davor wurden dlls, bin usw. in wwwroot abgelegt. – Zoinky

+0

Ich bin mir nicht sicher, was "websitepanel" ist; das kann eine relevante Änderung sein, um zu Ihrer Frage zu machen. – k3davis

Antwort

0

es war ein Versehen meinerseits, sollte der Gehalt an wwwroot höher sein als dort, wo der dlls gehen, ich bin mir nicht sicher, warum ich sie anzog in der gleiche Ordner an erster Stelle. @ K3davis korrekt war in erster Linie

auf \ IIS zeigt \ dlls \ wwwroot für alle statischen Dateien

Verwandte Themen