我翻译了我的mvc网站,这个网站运行得很好.如果我选择其他语言(荷兰语或英语),内容将被翻译.这是有效的,因为我在会话中设置了文化.
现在我想在网址中显示所选文化(=文化).如果它是默认语言,则不应在网址中显示,只有当它不是默认语言时才应在网址中显示.
例如:
对于默认文化(荷兰语):
site.com/foo
site.com/foo/bar
site.com/foo/bar/5
Run Code Online (Sandbox Code Playgroud)
对于非默认文化(英语):
site.com/en/foo
site.com/en/foo/bar
site.com/en/foo/bar/5
Run Code Online (Sandbox Code Playgroud)
我的问题是我总是看到这个:
site.com/ nl/foo/bar/5即使我点击了英文(参见_Layout.cs).我的内容是用英文翻译的,但网址中的路由参数仍然是"nl"而不是"en".
我怎样才能解决这个问题或者我做错了什么?
我尝试在global.asax中设置RouteData但没有帮助.
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("favicon.ico");
routes.LowercaseUrls = true;
routes.MapRoute(
name: "Errors",
url: "Error/{action}/{code}",
defaults: new { controller = "Error", action = "Other", code = RouteParameter.Optional }
);
routes.MapRoute(
name: "DefaultWithCulture",
url: "{culture}/{controller}/{action}/{id}",
defaults: new { culture = "nl", controller = "Home", action = "Index", id = UrlParameter.Optional },
constraints: new { culture = "[a-z]{2}" } …Run Code Online (Sandbox Code Playgroud) 开源属性路由允许具有多个路由前缀.为什么ASP.NET Web API 2.0不允许具有多个RoutePrefix().
[RoutePrefix("api/v1/{abc}/Entity")]
[RoutePrefix("api/v1/{abc}/{xyz?}/Entity")]
public class MyApiController : ApiController
{
[Route("")]
public IHttpResult Get()
{
return Ok("Hello World");
}
}
Run Code Online (Sandbox Code Playgroud) 使用新的MVC属性路由,我知道您可以Route为单个分配多个属性ActionResult,但我正在寻找在该RoutePrefix级别执行相同操作的方法.我有一个控制器,在每个动作中都应该可以通过三种途径访问:
/Games/{Title}/Characters/{Route}
/Books/{Title}/Characters/{Route}
/Cinema/{Title}/Characters/{Route}
我尝试了三个单独的RoutePrefix属性,但是我得到了错误Deuplace RoutePrefix attribute.如果我尝试使用以逗号分隔的列表,我会得到Best override method for does not contain a constructor that takes 3 arguments.
是否可以设置一个RoutePrefix所需的三个路径我的控制器?