gpt4 book ai didi

asp.net-mvc-2 - 处理名称中带有连字符的 MVC2 变量

转载 作者:行者123 更新时间:2023-12-03 05:47:16 25 4
gpt4 key购买 nike

我正在使用一些第三方软件,这些软件创建名称中带有连字符的查询字符串参数。我正在看this SO question看起来他们的解决方案非常接近我需要的东西,但我对底层 MVC 的东西太无知了,无法弄清楚如何调整它来完成我需要的事情。理想情况下,我想简单地用下划线替换连字符,这将是一个足够好的解决方案。如果有更好的,那么我有兴趣听听。

我想要处理的 URL 示例如下:

http://localhost/app/Person/List?First-Name=Bob&My-Age=3

使用此 Controller :

public ActionResult List(string First_Name, int My_Age)
{
{...}
}

再说一遍,我无法更改正在生成的查询字符串,因此我需要以某种方式用我的 Controller 支持它。但如何呢?

作为引用,下面是自定义 RouteHandler,用于处理我上面提到的 SO 问题中的 Controller 名称和操作名称中的下划线,我们可以对其进行修改以完成我想要的任务:

public class HyphenatedRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
return base.GetHttpHandler(requestContext);
}
}

最佳答案

您尝试过[Bind(Prefix="First-name")]吗?它可能会起作用...

一种方法是使用自定义模型绑定(bind)器。另一种方法是使用 Action 过滤器。如果您想在特定类型上执行此操作,请使用模型绑定(bind)器。如果您想在特定的操作或 Controller 上执行此操作,请使用操作过滤器。因此对于后一种方法,您可以执行以下操作:

    public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var keys = filterContext.HttpContext.Request.QueryString.AllKeys.Where(k => k.Contains('-'));
foreach(var k in keys)
{
filterContext.ActionParameters.Add(
new KeyValuePair<string, object>(
k.Replace('-', '_'), filterContext.HttpContext.Request.QueryString[k]));
}
base.OnActionExecuting(filterContext);
}

关于asp.net-mvc-2 - 处理名称中带有连字符的 MVC2 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2782156/

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