Asp.net mvc asp.net mvc控制器参数a?b1、c2。。。如何解析变量号?

Asp.net mvc asp.net mvc控制器参数a?b1、c2。。。如何解析变量号?,asp.net-mvc,Asp.net Mvc,如果asp.net mvc中的URL具有控制器的索引/显示方法签名中不适用的参数,是否可以在签名中使用类似于参数字符串[]的参数来收集这些参数。或者,当arg是一个分隔值的列表(即不是名称/值对)时,有什么好方法可以做到这一点 最终,我们有用户创建带有可变数量参数的URL&需要解析它们 这是我们目前拥有的代码,但我们不能不思考有更好的方法,而不是自己拆分字符串: var url = Request.RawUrl.Split('?'); if (url.Length > 1)

如果asp.net mvc中的URL具有控制器的索引/显示方法签名中不适用的参数,是否可以在签名中使用类似于参数字符串[]的参数来收集这些参数。或者,当arg是一个分隔值的列表(即不是名称/值对)时,有什么好方法可以做到这一点

最终,我们有用户创建带有可变数量参数的URL&需要解析它们

这是我们目前拥有的代码,但我们不能不思考有更好的方法,而不是自己拆分字符串:

var url = Request.RawUrl.Split('?');

   if (url.Length > 1)
   {
     var queryString = url[1];
     var queryStringArgs = queryString.Split('&');
     var queryStringMembers = from arg in queryStringArgs
             let c = arg.Split('=').Length == 1
             where c 
             select arg;
     ViewBag.QueryStringMembers = queryStringMembers.ToJson();    
   }
*附加:这些参数没有name=value,它只是一个值列表。
Request.QueryString似乎对我们没有帮助,因为它以不同的方式对待这些查询字符串参数,因为它们不是name=value,而是value。因此它将它们放在一个Request.QueryString[null]键中,作为逗号分隔的Request.QueryString.AllKeys将包含在QueryString上发送的参数名的字符串数组。这就是你要找的吗?

首先,你得到的是一个格式错误的URL。所以你完全是在自己分析它。你也可能期望它在任何时候都会失败。作为查询字符串一部分的所有内容,即第一个
之后的内容都必须是url编码的,您不应该有多个

也就是说,您可以编写自定义模型活页夹:

public class CustomModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var tokens = controllerContext.HttpContext.Request.RawUrl.Split('?');
        if (tokens.Length > 1) 
        {
            return tokens.Skip(1).ToArray();
        }
        return null;
    }
}
然后:

public ActionResult Index([ModelBinder(typeof(CustomModelBinder))]string[] args)
{
    return View();
}

是否有一套固定的组合,他们可能会“生成”或有太多的列表?因为我正在与海报在这个问题上。。它们可以有任意多的附加参数,这些参数不是name=value,它们只是value。对不起,是的,我已经附加了问题“这些参数没有name=value,它只是一个值列表”请求。QueryString以不同的方式处理这些查询字符串参数,因为它们不是name=value,它们只是value。因此它将它们放在Request.QueryString[null]键中,以逗号分隔。这也会造成伤害,因为arg中可能有一个逗号(即使是编码的)。你对URL格式错误的看法是正确的-这是我的错误,URL实际上没有多个?,因此我们在这方面做得很好。