我已经设法使用自定义 ModelBinder 破解它。我创建了一个名为QueryString
public class QueryString
{
private readonly IDictionary<string,string> _pairs;
public QueryString()
{
_pairs = new Dictionary<string, string>();
}
public void Add(string key, string value)
{
_pairs.Add(key.ToUpper(), value);
}
public string Get(string key)
{
return _pairs[key.ToUpper()];
}
public bool Contains(string key)
{
return _pairs.ContainsKey(key.ToUpper());
}
}
然后我为此创建了我的自定义活页夹:-
public class QueryStringModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var queryString = new QueryString();
var keys = controllerContext.HttpContext.Request.QueryString.AllKeys;
foreach (var key in keys)
{
queryString.Add(key, controllerContext.HttpContext.Request.QueryString[key]);
}
return queryString;
}
}
在我的 Global.asax 我注册它: -
ModelBinders.Binders.Add(typeof(QueryString), new QueryStringModelBinder());
现在我可以在我的 RedirectController 中使用它:-
public RedirectToRouteResult Item(QueryString queryString)
{
// user QueryString object to get what I need
// e.g. queryString.Get("action");
}