我有一个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?}");
});
任何想法有什么不对? 谢谢!