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

时间:2011-07-27 00:53:00

标签: asp.net-mvc

如果在asp.net mvc中的URL在控制器的索引/ show方法签名中具有不符合的args,是否可以在签名中使用类似params string [] args的东西来收集它们起来。或者当arg是一个分离值列表(即不是名称/值对)时,有什么好办法呢?

我们有用户,最终创建具有可变数量参数的网址&需要解析它们。

这是我们目前的代码,但我们不禁想到没有自己拆分字符串的更好方法:

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();    
   }

*附加:这些args没有name = value,它只是一个值列表。 Request.QueryString似乎没有帮助我们,因为它不同地处理这些查询字符串args,因为它们不是name = value,它们只是值。所以它将它们放在Request.QueryString [null]键中,以逗号分隔

2 个答案:

答案 0 :(得分:1)

首先,您拥有的是格式错误的网址。所以你完全可以解析它。您可能还希望它随时都会失败。作为查询字符串一部分的所有内容,即在第一个?之后,必须进行网址编码,您不应该有多个?

据说你可以写一个自定义模型绑定器:

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();
}

答案 1 :(得分:0)

Request.QueryString.AllKeys将包含QueryString中发送的参数名称的字符串数组。这就是你要找的东西吗?