Omdirigera till www och https i ASP.NET Core

I det här inlägget beskriver vi hur du kan omdirigera förfrågningar till www och https genom att använda ett mellanprogram (Middleware) i ASP.NET Core. Anledningarna till att göra en omdirigering (301) är förbättrad SEO och högre säkerhet avseende hemsidan.

Det är bättre att bara ha en version av din webbplats i sökmotorer, om du har flera versioner av din webbplats (http://, http:// www.https://, https://www.) kan din hemsida bli straffad i sökrankingen på grund av duplicerat innehåll.

Hyper Text Transfer Protocol Secure (HTTPS) är en säker version av Hyper Text Transfer Protocol (HTTP). Https betyder att all kommunikation mellan en webbläsare och en server är krypterad, detta gör det mycket svårt för en man i mitten att få information från data som skickas mellan en webbläsare och en server.

Varför en 301 omdirigering? En 301-omdirigering är en permanent omdirigering från en webbadress till en annan webbadress, detta betyder att sökmotorer vet att den URL du vidarebefordrar till är rätt webbadress och att alla sökrankningspoäng ska gälla för den här webbadressen.

Mellanprogram

Detta mellanprogram används för att göra omdirigeringar, jag använder IWebsiteSettingRepository website_settings_repository för att lagra information om vi skall göra en www-omdirigering och om vi skall göra en https-omdirigering. KeyStringList är en hanteringsklass för en uppslagsbok (Dictionary) med strängar, den här klassen gör det lättare att hämta värden från uppslagsboken.

/// <summary>
/// This middleware handles redirects
/// </summary>
public class RedirectMiddleware
{
#region Variables

private readonly RequestDelegate next;

#endregion

#region Constructors

/// <summary>
/// Create the middleware
/// </summary>
public RedirectMiddleware(RequestDelegate next)
{
    // Set values for instance variables
    this.next = next;

} // End of the constructor

#endregion

#region Methods

/// <summary>
/// Invoke the middleware
/// </summary>
public async Task Invoke(HttpContext context, IWebsiteSettingRepository website_settings_repository)
{
    // Get the host and the url
    string host = context.Request.Host.Host;
    string url = host + context.Request.Path;

    // Get website settings
    KeyStringList settings = website_settings_repository.GetAllFromCache();
    string redirect_https = settings.Get("REDIRECT-HTTPS");
    string redirect_www = settings.Get("REDIRECT-WWW");

    if (host == "mysite.azurewebsites.net")
    {
        // Call the next delegate/middleware in the pipeline
        await next(context);
    }
    else if (redirect_https.ToLower() == "true" && context.Request.IsHttps == false)
    {
        UriBuilder uriBuilder = new UriBuilder(url);
        uriBuilder.Scheme = "https";
        uriBuilder.Host = redirect_www.ToLower() == "true" && host.Contains("www.") == false ? "www." + uriBuilder.Host : uriBuilder.Host;
        uriBuilder.Port = 443;

        // Redirect to https, 301
        context.Response.Redirect(uriBuilder.Uri.AbsoluteUri, true);
    }
    else if (redirect_www.ToLower() == "true" && host.Contains("www.") == false)
    {
        // Modify the url
        UriBuilder uriBuilder = new UriBuilder(url);
        uriBuilder.Host = "www." + uriBuilder.Host;

        // Redirect to www, 301
        context.Response.Redirect(uriBuilder.Uri.AbsoluteUri, true);
    }
    else
    {
        // Call the next delegate/middleware in the pipeline
        await next(context);
    }

} // End of the Invoke method

#endregion

} // End of the class

Använd mellanprogrammet

Vårt mellanprogram läggs till i metoden Configure i klassen StartUp och detta mellanprogram används för att omdirigera till www och/eller https.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Use redirection
    app.UseMiddleware<RedirectMiddleware>();

    // More code...

} // End of the Configure method

Lämna ett svar

E-postadressen publiceras inte. Obligatoriska fält är märkta *