перенаправить в Application_BeginRequest на MVC - PullRequest
2 голосов
/ 12 декабря 2011

У меня многоязычный сайт. Я пытаюсь перейти на английский (включая URL), когда на сайте нет запрошенного языка. Я хочу сделать это, перенаправив на ту же страницу, но изменив язык URL. Поэтому я добавил ресурс с ключом "_Language", который получает код языка, если он активен. Например, если файл ресурсов не существует или существует, но не готов, он переключится на другой язык. В global.asax у меня есть этот код:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "DefaultLang", // Route name
        "{language}/{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
        new { language = "^[a-z]{2}$" } // Get language
    ); 

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Cuenta", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}

public static string Language
{
    get
    {
        var currentContext = new HttpContextWrapper(HttpContext.Current);
        var routeData = RouteTable.Routes.GetRouteData(currentContext);
        if (routeData != null)
        {
            var lang = (string)routeData.Values["language"];
            if (lang != null && lang.Length == 2)
                return lang.ToLower();
        }
        return "es";
    }
}

protected void Application_BeginRequest(object sender, EventArgs e)
{
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(MvcApplication.Language);
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(MvcApplication.Language);

    if (Texts._Language != MvcApplication.Language) // Detect fallback.
    {
        Response.Redirect(Request.Url.AbsoluteUri.Replace("/" + MvcApplication.Language + "/", "/en/"));
        Response.End();
        return;
    }
}

Моя проблема в том, что по какой-то причине каждый раз, когда пользователь перенаправляет запрос BeginRequest, его ответ равен 404. Я сравнил URL-адрес с URL-адресом, когда язык установлен (с самого начала) на английском, и они так же! Почему это происходит?

1 Ответ

2 голосов
/ 12 декабря 2011

Как глупо!Я фактически делал это с запросом POST = (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...