2011-07-27 10 views
2

asp.net mvcのURLに、コントローラのインデックス/ showメソッドのシグネチャに含まれていない引数がある場合、シグネチャ内のparams string [] argsのようなものを使用してそれらを収集できますか。 argが分離された値のリスト(名前と値のペアではない)である場合、これを行う良い方法は何ですか?asp.net mvcコントローラ引数a?b1、c2 ...変数番号の解析方法?

私たちは、最終的に、可変数の引数を持つ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();  
    } 

*追加:これらの引数は、名前=値を持っていけない、それはです値のリスト。 Request.QueryStringは、これらのクエリ文字列引数が名前=値ではなく、単なる値であるため、これらを異なる方法で扱うため、役に立たないようです。そこで、それらをコンマで区切ってRequest.QueryString [null]キーに入れます。

+0

は、彼らが「生成」またはそれにあまりにも多くあるかもしれない組み合わせの固定セットがありますリスト? – colithium

+0

私はこの問題のポスターを使って作業しています。彼らは名前=値ではないので、多くの追加の引数を持つことができます。 –

+0

申し訳ありません申し訳ありませんが、 "これらの引数は名前=値を持たず、値の一覧にすぎません"という質問が追加されました。 – PandaWood

答えて

0

Request.QueryString.AllKeysには、QueryStringで送信された引数名の文字列配列が含まれます。それはあなたが探しているものですか?

+0

Request.QueryStringはこれらのクエリ文字列引数を異なる名前で扱います。したがって、それらをコンマで区切ってRequest.QueryString [null]キーに入れます。 argの中にコンマ(エンコードされていても)が存在する可能性があるため、これは痛いものです。 –

1

まず最初にあなたが持っているものは、不正な形式の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(); 
} 
+0

URLの形式が間違っているのは間違いです。私の間違いでしたが、URLには実際には複数の文字が含まれていません。 – PandaWood

関連する問題