2009-03-11 18 views
0

私のasp.net-mvc ontrollerではフォームフィールドの値を受け入れ、Luceneライブラリが理解できる文字列を作成します。 次に、このlucene文字列に応じて結果を表示するgetメソッドにリダイレクトします。名前付きルートに(URLエンコードされた)クエリーストリングを追加する必要がありますか?

Luceneの文字列がパターンに{fieldName1:VALUE1 fieldName2:値2 ...}れる:

routes.MapRoute(
    "AdvancedSearch", 
    "AdvancedSearch.mvc/{displayType}/luceneString", 
    new { controller = "Search", action = "AdvancedSearch", 
      displayType = "chip", luceneString = "" } 
); 

だから、私のコントローラキャッチ

私のGlobal.asaxをリダイレクト目標のための次のエントリを有しています投稿はluceneStringを作成し、以下を実行します:

return RedirectToRoute("AdvancedSearch", new 
    { 
     Controller = "Search", 
     action = "AdvancedSearch",    
     displayType = "chip", 
     queryString = Url.Encode("company:test name:testname") 
    }); 

これは私に500:悪い要求を与えます。 1つのパラメータでも動作しません。 ":"があっても動作しません。
は、私が試した:

  • AdvancedSearch.mvc /チップ/会社%の3Atest +名%3AtestName
  • AdvancedSearch.mvc /チップ/会社:テスト+名:テスト名
  • AdvancedSearch.mvc /チップ/会社:テスト
  • AdvancedSearch.mvc /チップ/会社%3Atest
  • 私は

    の形式でのqueryStringを取るために、このURLを変更する場合にのみ動作します

私は、クエリ文字列を使用する必要がある場合、どのように私は、ルートテーブルにそのようなことを定義することができます私は右に頼らずにエンコーディングを取得するために行う必要があります「?Q =」

AdvancedSearch.mvc/chip?q=company%3Atest+name%3AtestName 

?リダイレクトを呼び出すにはどうすればいいですか?

+0

私は答えを持っていないが、あなたはそれがになっていない何かをするASP-MVCを取得しようとしているように聞こえます。ルートは、クエリ文字列を置き換えるRESTfulな方法であると考えられています。私はLuceneがそれを必要とするかもしれないことを理解していますが、あなたが思いつく解決策はどれも、永久的なものになるでしょう。 –

+0

どのように?私が正しいことを理解すれば、私のURLはRESTfullになります。 URLへのリクエストを取得すると、常に同じページが返されます。セッションや何も必要ありません。 URLの最後の部分にクエリ文字列が含まれているだけです。 –

+0

マイポストリクエストはGETリクエストにリダイレクトされます。彼らはまだステートレスになります。私のURLの最後の部分がlucene文字列であるという事実は、RESTレスにしていますか? –

答えて

3

まず、MapRouteにはクエリ文字列に関する情報は含まれていないはずです。ルートには、URIのリソース部分のみが含まれます。クエリには含まれません。

第2に、クエリ文字列をエンコードする必要はありません。アクションリンク/ルートリンク/ etc。あなたのためにそれを行います。 HREFを構築する場合、ルートに含まれていないトークンは自動的にエンコードされたクエリ文字列パラメータになります。

削除:あなたのルートから

/luceneString 

...

がするようにコードを変更し

return RedirectToRoute("AdvancedSearch", new 
{ 
    Controller = "Search", 
    action = "AdvancedSearch",    
    displayType = "chip", 
    q = "company:test name:testname" 
}); 
+0

ありがとうございます。しかし、なぜ私のluceneStringはURLの一部ではありませんか?これはキャッシングにどのように影響しますか?キャッシングはクエリ文字列にも依存していますか? –

+0

URIのリソース部分に入れたい場合、それはルートの一部です。 URIのクエリー文字列部分に入れたい場合、それはルートの一部ではありません。一般的に、キャッシュはクエリ文字列を含むURI全体に依存しますが、どのような種類のキャッシュを要求しているかによって異なります。 –

+0

デフォルトのIISキャッシュ。 –

関連する問題