Asp.net mvc 如何获取当前操作的url(在修改某些路由数据后)?

Asp.net mvc 如何获取当前操作的url(在修改某些路由数据后)?,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我正在通过母版页中的更改语言控件对站点进行本地化。我需要用您当前所在的url以不同的语言呈现控件 因此,如果您使用en/Home/About,并且您将语言更改为法语,我需要指示您使用fr/Home/About 本地化代码在route data language属性上起作用,因此我一直在尝试如何: 使用所有原始参数访问当前操作 在路由数据更改的情况下,获取包含所有原始参数的当前操作的url。 谁能给我指出正确的方向吗 我尝试将ViewContext从父级传递到UserControl,这使我能够访问

我正在通过母版页中的更改语言控件对站点进行本地化。我需要用您当前所在的url以不同的语言呈现控件

因此,如果您使用en/Home/About,并且您将语言更改为法语,我需要指示您使用fr/Home/About

本地化代码在route data language属性上起作用,因此我一直在尝试如何:

使用所有原始参数访问当前操作 在路由数据更改的情况下,获取包含所有原始参数的当前操作的url。 谁能给我指出正确的方向吗


我尝试将ViewContext从父级传递到UserControl,这使我能够访问路由数据,但我不知道如何从中获取语言路由url。

我在本地工作的站点上运行了此操作,它似乎起到了作用。可能有更干净的方法

HttpRequestBase hrb = HttpContext.Request;
System.Uri url = hrb.Url;
string[] test = url.AbsoluteUri.Split('/');
int nIndex = 0, nCounter = 0;
foreach(string str in test)
{
  if (str.Contains("site.com"))
  {
    nIndex = nCounter;
    break;
  }
  nCounter++;
}
string strLanguage = test[nIndex + 1];

显然+1甚至可以出现在IF语句中,但我认为它看起来不太好。希望这能有所帮助。

我对此不是100%满意,我还没有到一个可以完全测试其影响的阶段,但这是我目前要做的。如果您有更好的解决方案,请务必回答

我从母版页传递ViewContext,因此我从您当前所在的url获取带有路由数据的ViewContext

private string GetLocalisedUrl(ViewContext viewContext, string language)
{
    viewContext.RouteData.DataTokens[LANGUAGE_ROUTEDATA_KEY] = language;
    UrlHelper helper = new UrlHelper(viewContext.RequestContext);

    return helper.Action(viewContext.RouteData.Values["action"].ToString(), viewContext.RouteData.Values["controller"].ToString(), viewContext.RouteData.DataTokens);
}

谢谢你的建议,但我正在寻找一个MVC路由解决方案,而不是手动url重写解决方案。是的,我不知道如何在控制器前抓取任何东西。如果可能的话,那么我认为在全局文件中需要一个具有{language}/{controller}/{action}的文件,但是我现在不能给你一个实际的例子。