Reputation: 603
I am trying to publish ASP.NET Core 2.2 Web API and Angular 8 project with a hosting provider SmarterASP.NET that supports ASP.NET Core. However, I am getting the following error:
500 - Internal server error. There is a problem with the resource you are looking for, and it cannot be displayed.
However, the project works perfectly if I start it locally.
I searched through the Internet and various forums and see this question, another one question and this github post.
This is my Main
method:
public class Program
{
public static void Main(string[] args)
{
var host = CreateWebHostBuilder(args).Build();
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
host.Run();
}
}
This is my Configure()
of StartUp
class:
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
IServiceProvider provider)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == 404 &&
!Path.HasExtension(context.Request.Path.Value))
{
context.Request.Path = "/index.html";
await next();
}
});
app.ConfigureCustomExceptionMiddleware();
app.UseCors("ApiCorsPolicy");
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"StaticFiles")),
RequestPath = new PathString("/StaticFiles")
});
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseMvc();
app.UseDeveloperExceptionPage();
}
And this is my web.config
file:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<httpErrors errorMode="Detailed" />
<aspNetCore processPath="dotnet">
<environmentVariables>
<environmentVariable name="ASPNETCORE_DETAILEDERRORS" value="true" />
</environmentVariables>
</aspNetCore>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2"
resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\fooappl.dll" stdoutLogEnabled="true"
stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
</system.webServer>
</location>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration>
<!--ProjectGuid: 25e0e882-c3ff-4f8d-98cc-f26a692fa019-->
I've created folders logs\stdout
, however, logs file were not created.
I am little bit stuck. Could you say what am I doing wrong?
Upvotes: 1
Views: 1275
Reputation: 603
I've managed to deploy my application! Maybe it will help to others.
So my mistakes were:
Not correct web.config
. Thanks to guys from SmarterAsp.Net! This is the correct web.config
which shows detailed error:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2"
resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\yourAppl.dll"
stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"
hostingModel="InProcess" >
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT"
value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>
<!--ProjectGuid: 25e0e882-c3ff-4f8d-98cc-f26a692fa019-->
After web.config
was fixed, then detailed errors are shown. And error was FileNotFoundException
. The reason was that Directory.GetCurrentDirectory()
works incorrectly.
So I've changed code to:
private IHostingEnvironment _env;
public Startup(IConfiguration configuration, IHostingEnvironment env)
{
Configuration = configuration;
_env = env;
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider provider)
{
// The other code is omitted for the brevity
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(_env.ContentRootPath, @"StaticFiles")),
RequestPath = new PathString(Path.Combine(_env.ContentRootPath, "/StaticFiles"))
});
}
wwwroot
inside of my ASP.NET Core 2.2 application and put Angular prod bundle into itIf somebody would need a guide how to deploy from Visual Studio
Upvotes: 3
Reputation: 11
Try removing hostingModel="InProcess" from your web.config file.
Upvotes: 1
Reputation: 1304
I got similar type of problem and i fixed this by providing complete path of dotnet exe in config file. update process path according to your server path:
<aspNetCore processPath="C:\Program Files\dotnet\dotnet.exe" arguments=".\fooappl.dll" stdoutLogEnabled="true"
stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
Try once!
Upvotes: 3