Sprachspezifische Standard-URL unter Verwendung der MVC-Attribute Routing und RouteLocalization.mvc

Ich möchte in der Lage sein, eine prägnante sprachspezifische Standard-URL für meine Website zu erstellen, damit beim Navigieren zu:

somesite.com

Sie werden zu einer Sprachkultur-Seite weitergeleitet, wie zum Beispiel:

somesite.com / de-DE / somesite.com / sp-MX / somesite.com / fr-FR /

Speziell, ichunterlassen Si wollen / Home / Index an die URLs angehängt:

somesite.com / de-DE / Home / Index somesite.com / sp-MX / Home / Index somesite.com / fr-FR / Home / Index

Ich bin entschlossen, diese Website mit RouteLocalization.mvc zu erstellen.

Dresel / RouteLocalizationÜbersetzen Ihrer ASP.NET MVC-Routen

Und ich würde gerne @ verwendMVC Attribut Routing soweit machbar.

Ich habe Probleme, herauszufinden, wie die Start () - Methode auf eine sprachkulturspezifische URL umgeleitet werden kann, ohne etwas wie "index" hinzuzufügen.

Beispiele von dem, was ich versucht habe, folgen:

using RouteLocalization.Mvc;
using RouteLocalization.Mvc.Extensions;
using RouteLocalization.Mvc.Setup;

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.Clear();

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapMvcAttributeRoutes(Localization.LocalizationDirectRouteProvider);

        const string en = "en-us";
        ISet<string> acceptedCultures = new HashSet<string>() { en, "de", "fr", "es", "it" };

        routes.Localization(configuration =>
        {
            configuration.DefaultCulture = en;
            configuration.AcceptedCultures = acceptedCultures;
            configuration.AttributeRouteProcessing = AttributeRouteProcessing.AddAsNeutralAndDefaultCultureRoute;
            configuration.AddCultureAsRoutePrefix = true;
            configuration.AddTranslationToSimiliarUrls = true;
        }).TranslateInitialAttributeRoutes().Translate(localization =>
        {
            localization.AddRoutesTranslation();
        });

        CultureSensitiveHttpModule.GetCultureFromHttpContextDelegate = Localization.DetectCultureFromBrowserUserLanguages(acceptedCultures, en);

        var defaultCulture = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;

        routes.MapRoute(
            name: "DefaultLocalized",
            url: "{culture}/{controller}/{action}/{id}",
            constraints: new { culture = @"(\w{2})|(\w{2}-\w{2})" }, 
            defaults: new { culture = defaultCulture, controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

Und meine Heimsteuerung:

public class HomeController : Controller
{
    [HttpGet]
    [Route]
    public RedirectToRouteResult Start()
    {
        return RedirectToAction("Home", new { culture = Thread.CurrentThread.CurrentCulture.Name });
    }

    [Route("Index", Name = "Home.Index")]
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Contact()
    {
        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}

Meine Global.asax-Datei:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {            
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        AreaRegistration.RegisterAllAreas();
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage