gpt4 book ai didi

c# - 查询字符串参数的备用名称

转载 作者:太空狗 更新时间:2023-10-29 23:08:27 24 4
gpt4 key购买 nike

是否可以在 ASP.NET MVC 中为查询字符串参数设置备用名称?

我有这个简单的 Controller 索引操作:

public ActionResult Index(color = "")
{
...
}

调用 http://mysite.com/mypage/?color=yellow 效果很好,color 参数自动从查询字符串中获取其值“yellow” .

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

如何为查询字符串参数的备用名称设置映射?

最佳答案

How do I set mappings for alternate names for querystring parameters?

您可以编写自定义模型 Binder 。

因此,就像在每个 ASP.NET MVC 应用程序中一样,您从编写 View 模型开始:

public class MyViewModel
{
public string Color { get; set; }
}

然后是这个模型的模型 Binder :

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,
};
}
}

将在您的 Application_Start 注册:

ModelBinders.Binders.Add(typeof(MyViewModel), new MyViewModelBinder());

现在您的 Controller 操作可以将 View 模型作为参数:

public ActionResult Index(MyViewModel model)
{
...
}

当然,您可以通过在属性上使用一些自定义属性来使模型绑定(bind)器更加灵活:

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

并在模型 Binder 中读取这些值并尝试从查询字符串中读取它们,直到找到一个不为空的值。

关于c# - 查询字符串参数的备用名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18010118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com