NickCraver/StackExchange.Exceptional

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

fingers10 opened this issue · 4 comments

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.

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?

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

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: #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?}

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