How to Get Error Details of an ASP.NET 5 app deployed on Azure Websites?

偶尔善良 提交于 2019-11-27 18:58:17

In RC1 (as of beta8, perhaps), one should apparently use:

app.UseDeveloperExceptionPage();

.. which apparently only works if app.Properties["host.AppMode"] is "development".

But this didn't work for me. The error message I was getting was specifically "An error occurred while starting the application", I have found that none of the given configurations will resolve this because the error is occurring before the configurations execute.

Somehow, the publish target folder must have gotten corrupted during publish because I found that deleting the entire deployment directory and re-publishing resolved the problem.

Otherwise, here is the reference: http://docs.asp.net/en/latest/fundamentals/diagnostics.html https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling

NPNelson

Errors that occur in startup in an ASPNET5 application are really hard to track down when running the app in Azure (at least with beta 3). Hopefully they find a way to improve the experience. I had to resort to stripping my startup down to the bare bones and then adding code line by line until the failure happened (in my case, it was a missing environment variable).

I've also used code like this (for debugging only) which might help depending on where the error is happening:

public void Configure(IApplicationBuilder app, IHostingEnvironment env )
    {           
        try
        {                       
            // Add MVC to the request pipeline.
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action}/{id?}"
                   );
            });
        }

//exceptions in startup are really bad when running in azure, all you will get is an internal server error
//this code will write the exception message to the browser instead.  Only use for debugging!!!

      catch (Exception ex)          
      {
            app.Run(async context =>
            {
                context.Response.ContentType = "text/plain";
                await context.Response.WriteAsync(ex.Message);
            });
        }
    }

Update 10/27/2016 A lot has changed since my original answer. The latest guidance is posted here:

https://docs.asp.net/en/latest/fundamentals/hosting.html

So, add:

.CaptureStartupErrors(true) and .UseSetting(WebHostDefaults.DetailedErrorsKey, "true") on your WebHostBuilder like so:

 var host = new WebHostBuilder()
            .CaptureStartupErrors(true)
            .UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

You must set app settings property ASPNET_DETAILED_ERRORS to true in web.config file.

Example of my edited web.config file:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="bootstrapper-version" value="1.0.0-beta6" />
    <add key="runtime-path" value="..\approot\runtimes" />
    <add key="dnx-version" value="1.0.0-beta6" />
    <add key="dnx-clr" value="clr" />
    <add key="dnx-app-base" value="..\approot\src\MyApp" />
    <!-- This will turn on detailed errors when deployed to remote servers -->
    <!-- This setting is not recommended for production -->
    <add key="ASPNET_DETAILED_ERRORS" value="true" />
  </appSettings>
  <system.web>
    <httpRuntime targetFramework="4.5.1" />
  </system.web>
</configuration>

I've experienced the exact same error with a web app running dnx-clr-win-x64.1.0.0-rc1-update1. I did the deployment directly from Visual Studio 2015 Enterprise Update 1. I found that the site was working whenever I did the first deployment on a newly created web app. Starting with the second deployment (even when deploying the exact same content), I started to see Internal Server Error 500. That brought me to the following solution:

Enabling "Remove additional files at destination" in the publishing wizard of Visual Studio fixed it for me.

I had the same issue and spent a lot of time trying to dig into error logs, etc. (all of the other solutions given above). None of them giving any clue of what's gone wrong.

What I did that helped me finally see the error was to simply try to publish to a local IIS (after all azure web-app runs your dnx on IIS internally).

I could then immediately see that there are error when IIS tries to compile the source. (in my case was some malformed nuget package).

So in short:

Recreate what happens on azure web-app by publishing to local IIS.

Create a web.config inside your wwwroot folder with this content :

<configuration>
  <system.web>
    <customErrors mode="Off" />
  </system.web>
</configuration>

Have you checked in the eventlog.xml file? It's in the D:\home\LogFiles directory. You can view it from your app's Kudu site, or use the Azure Websites Event Viewer extension.

Did you try using Remote Debugging the Azure Webapp ? Chances are there is some exception happening which is responsible for this and if you watch your DEBUG OUTPUT window, you may be able to see which exception is happening and then change Visual Studio settings to break on that exception to see where it is happening. check this article to understand how to remote debug - http://blogs.msdn.com/b/webdev/archive/2013/11/05/remote-debugging-a-window-azure-web-site-with-visual-studio-2013.aspx

In my case with beta5, custom errors in web.config didn't help, local IIS was fine, and adding an exception handler didn't display anything. The only thing that worked was to nuke approot and redeploy.

In the Web app's Application settings, in the section App settings, add (or change the value of) Hosting:Environment to Development. Then you get the same error page as in your local development. In my Startup.cs, I have the regular Configure() method with the following code: (still in MVC 1.0 RC1-final)

        if (env.IsDevelopment())
        {
            app.UseBrowserLink();
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else

Hope this helps!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!