C# querystring参数的备用名称

C# querystring参数的备用名称,c#,asp.net-mvc,C#,Asp.net Mvc,是否可以在ASP.NET MVC中为querystring参数设置其他名称 我有一个简单的控制器索引操作: public ActionResult Index(color = "") { ... } 呼叫http://mysite.com/mypage/?color=yellow工作得非常好,color参数自动从查询字符串中提取其值“黄色” 但现在我希望有一个相同页面的本地化变体,具有“漂亮”的本地化参数,但仍然使用相同的控制器方法。示例:http://mysite.com/mypag

是否可以在ASP.NET MVC中为querystring参数设置其他名称

我有一个简单的控制器索引操作:

public ActionResult Index(color = "")
{
    ...
}
呼叫
http://mysite.com/mypage/?color=yellow
工作得非常好,
color
参数自动从查询字符串中提取其值“黄色”

但现在我希望有一个相同页面的本地化变体,具有“漂亮”的本地化参数,但仍然使用相同的控制器方法。示例:
http://mysite.com/mypage/?farve=gul
。在这里,我希望将“gul”作为
color
参数传递给默认的
Index()
方法

如何为querystring参数的备用名称设置映射

如何为querystring参数的备用名称设置映射

您可以编写自定义模型活页夹

因此,在每个ASP.NET MVC应用程序中,您首先要编写一个视图模型:

public class MyViewModel
{
    public string Color { get; set; }
}
然后是此模型的模型绑定器:

public class MyViewModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var query = controllerContext.HttpContext.Request.QueryString;
        var value = query["color"] ?? query["gul"] ?? query["couleur"];
        return new MyViewModel
        {
            Color = value,
        };
    }
}
它将在您的
应用程序启动时注册

ModelBinders.Binders.Add(typeof(MyViewModel), new MyViewModelBinder());
现在,控制器操作可以将视图模型作为参数:

public ActionResult Index(MyViewModel model)
{
    ...
}
当然,通过在属性上使用一些自定义属性,可以使模型绑定器更灵活:

public class MyViewModel
{
    [PossibleQueries("color", "gul", "couleur")]
    public string Color { get; set; }
}

然后在模型绑定器中读取这些值,并尝试从查询字符串中读取它们,直到找到一个不为null的值。

第二个具有本地化/漂亮名称的控制器如何,其中操作和参数具有本地化名称,并从默认/英文控制器调用操作?使用此方法可以本地化url的所有部分

Controller mypage
{
    ActionResult Index(string color)
    {
        // normal code
    }
}

Controller meineseite
{
    ActionResult Index(string farbe)
    {
        return mypage.Index(farbe);
    }
}

可能受骗:谢谢,我实现了一个自定义模型绑定器-工作非常完美。:)