NickCraver / StackExchange.Exceptional

Error handler used for the Stack Exchange network
https://nickcraver.com/StackExchange.Exceptional/
Apache License 2.0
858 stars 170 forks source link

error route handler not rendering ui properly with asp.net core 3.x razor pages #182

Open fingers10 opened 4 years ago

fingers10 commented 4 years ago

I came across this awesome nuget package to handle and log exceptions in asp.net core. I tried this in my razor pages application and things worked fine. However when I try to use error routes to see the errors, the page is not getting displayed properly.

My Error Page:

public class ErrorModel : PageModel
{
    public async Task OnGetAsync()
    {
        await ExceptionalMiddleware.HandleRequestAsync(HttpContext).ConfigureAwait(false);
    }
}

Here is the error route screen print:

enter image description here

Here is the console log:

enter image description here

Here is my ConfigureServices method:

services.AddExceptional(Configuration.GetSection("Exceptional"), options =>
{
    options.UseExceptionalPageOnThrow = Env.IsDevelopment();
});

Here is my Configure method:

app.UseExceptional();

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
});

I even tried changing the middleware order by placing the app.UseExceptional() after app.UseStaticFiles(). But still it doesn't work. Please assist on why the assets are not getting loaded.

NickCraver commented 4 years ago

Hmmm, looks like a routing issue where the path is one off. Can please you show me the relative path of the page and the resources it's trying to load?

fingers10 commented 4 years ago

Here you go,

It works if I use it in controllers as shown below:

public class ExceptionsController : Controller
{
    public async Task Index() 
    {
        await ExceptionalMiddleware.HandleRequestAsync(HttpContext).ConfigureAwait(false);
    } 
}

But not with razor pages as shown below:

public class ErrorModel : PageModel
{
    public async Task OnGetAsync()
    {
        await ExceptionalMiddleware.HandleRequestAsync(HttpContext).ConfigureAwait(false);
    }
}

Project Structure: image

agrath commented 3 years ago

I think I encountered a similar issue but I had the error page hosted in a controller.

Not sure if something similar is happening in razor pages routing.

In my case, I was using a routeprefix and route attribute like so: image

CSS and sub-routes wouldn't work. Found the fix for my particlular issue here: https://github.com/NickCraver/StackExchange.Exceptional/issues/154

image

Note: two changes, added ~ to bypass routeprefix (was testing this and it didn't work but decided to keep this) The change that worked was adding {/{path?}/{subPath?}

IronSean commented 3 years ago

I also just ran into this, documenting the path definition requirements would help people get it running.