更改语言

时间:2017-03-26 06:49:05

标签: asp.net-core-mvc

我有一个asp.net核心1.1 mvc应用程序,我在更改语言后遇到路由错误(404)。它在测试模式(localhost)中运行良好 - 但不在生产中 - IIS。

在点击语言更改按钮之前,这是我的网址。

http://subdomain.myurl.com/SiteName/Controller/Action/Id

我的观看代码如下所示:

@using Microsoft.AspNetCore.Http.Features
@using Microsoft.AspNetCore.Localization
@using Microsoft.Extensions.Options
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@inject IOptions<RequestLocalizationOptions> LocOptions

@{
    var requestCulture = Context.Features.Get<IRequestCultureFeature>();
    var cultureItems = LocOptions.Value.SupportedUICultures
        .Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
        .ToList();
}

<div title="@Localizer["Request culture provider:"] @requestCulture?.Provider?.GetType().Name">
    <form id="selectLanguage" asp-controller="ChangeLanguage"
          asp-action="SetLanguage" asp-route-returnUrl="@Context.Request.Path"
          method="post" class="form-horizontal" role="form">
        @Localizer["Language"] <select name="culture"
                                        onchange="this.form.submit();"
                                        asp-for="@requestCulture.RequestCulture.UICulture.Name" asp-items="cultureItems"></select>
    </form>
</div>

然后我的controllercode看起来像这样:

   public class ChangeLanguageController : Controller
    {
        [HttpPost]
        public IActionResult SetLanguage(string culture,                                          string returnUrl)
        {
            Response.Cookies.Append(
                CookieRequestCultureProvider.DefaultCookieName,
                CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
                new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
            );
            ViewBag.Er = returnUrl;
            return LocalRedirect(returnUrl);
        }
    }

之后: return LocalRedirect(returnUrl) 我的网址看起来像这样 - 我收到了一个错误:

http://subdomain.myurl.com/Controller/Action/Id

我的MapRoute看起来像这样:

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });

任何想法有什么不对? 谢谢!

0 个答案:

没有答案
相关问题