asp.net-mvc - 在 MVC 上的 Application_BeginRequest 中重定向

标签 asp.net-mvc redirect global-asax

我有一个多语言网站。当网站没有请求的语言时,我正试图更改为英语(包括 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 进行了比较,它们是相同的!为什么会这样?

最佳答案

多么愚蠢!我实际上是通过 POST 请求来做到这一点的 =(

关于asp.net-mvc - 在 MVC 上的 Application_BeginRequest 中重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8473937/

相关文章:

asp.net-mvc - 在 ASP.NET MVC 3 中使用 Ajax 响应发送自定义错误页面

delphi - Indy 在 POST 重定向后使用 GET 发送参数

c# - ASP.NET 重定向和结束页面

error-handling - 使用Global.aspx页面进行错误报告

c# - 通过global.asax从外部类获取web.config请求

c# - 如何将数据从 Controller 传递到 ASP.net MVC 中查看?

c# - TransactionScope 是否适用于不同的 Context 对象

asp.net-mvc - 最佳实践错误处理ASP.Net MVC

php - Symfony 5 - 基于浏览器语言的网站翻译后重定向

c# - .net session 状态已创建 session ID,但无法保存它,因为响应已被应用程序刷新