Ivan Ivanov
Ivan Ivanov

Reputation: 203

Razor Pages add extension in routing

In ASP.NET Core Razor Pages how can I add routing to all pages for example ".html" for extension.

Example: / home to become /home.html

Upvotes: 1

Views: 300

Answers (1)

Xueli Chen
Xueli Chen

Reputation: 12685

Use URL Rewriting Middleware, try the code as shown below:

1.In Configure

app.UseRewriter(new RewriteOptions()
                           .Add(RewriteRules.RedirectRequests)
                           .Add(RewriteRules.ReWriteRequests)
                           );

2.Custom a class containing RedirectRequests and ReWriteRequests

   public class RewriteRules
{
    public static void RedirectRequests(RewriteContext context)
    {
        var request = context.HttpContext.Request;

        if (request.Path.Value.EndsWith("/", StringComparison.OrdinalIgnoreCase))
        {
            context.HttpContext.Response.Redirect("/Home.html");
        }
        else if(!request.Path.Value.EndsWith(".html", StringComparison.OrdinalIgnoreCase))
        {
            context.HttpContext.Response.Redirect($"{ request.Path.Value }.html");
        }
    }

    public static void ReWriteRequests(RewriteContext context)
    {
        var request = context.HttpContext.Request;            

        if (request.Path.Value.EndsWith(".html", StringComparison.OrdinalIgnoreCase))
        {
            context.HttpContext.Request.Path = context.HttpContext.Request.Path.Value.Replace(".html","");

        }
    }

}

Reference: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/url-rewriting?view=aspnetcore-2.1&tabs=aspnetcore2x

Upvotes: 1

Related Questions