2012-04-19 11 views
1

Backboneを使用するWebフロントエンドがREST APIを使用しているASP.NET MVCプロジェクトがあります。機能の作品の一つは、現在、このようなURLを使用するフリーテキスト検索、次のとおりです。REST APIでフリーテキスト検索を許可するにはどうすればよいですか?

http://server/Search/{search-query}/{page-number}/{page-count}

これは(それに応じてマッピングされたルートで)このような検索コントローラーを指す:

public JsonResult Search(string query, int page, int pageSize) 
{ 
    // Do search 
} 

複雑な文字(例:testhello+world)を使用した単純なクエリでは問題ありませんが、*,&などの特殊文字のように見えますが、これはかなり簡単に破損し、検索クエリとして

A potentially dangerous Request.Path value was detected from the client

には、ユーザーが入力したテキストボックスを介しては、これは無効な文字が含まれている検索クエリに対処するより弾力的であることが必要です。

encodeURIComponentを使用して検索文字列をエンコードしようとしましたが、問題のある文字がすべてエンコードされていないようです。

REST API経由のフリーテキスト検索を許可する方法はありますか?どんな考えやアドバイスも感謝します。ありがとう。

答えて

2

私は、リソースパスではなく、クエリ文字列にもページングパラメータを入れる方が良いと思います。結局のところ、検索に依存しており、検索しているリソースのサブリソースではありません。また、この "/ Search/Search /"もあります。

だから私はあなたの検索URLのあるべきだと思う:

http://server/Search/?q=hello+world&page=1&page_size=10 
+0

うん、これは私がやってしまったものを最終的にあります。 – Mun

0

これが正しい解決策であるかどうかはわかりませんが、URLのコア部分から検索クエリを壊してクエリ文字列に移動してしまいました。だから、REST呼び出しは次のようになります。

http://server/Search/Search/{page-number}/{page-size}/?q={search-query}

これはまだ同じコントローラを使用しています:

public JsonResult Search(string q, int page, int pageSize) 
{ 
    // Do search 
} 

注:検索クエリのための方法パラメータがにqqueryから改名されましたクエリーストリング・パラメーターの名前を反映します。

検索のURLは次のようになります。

http://server/Search/Search/1/10/?q=hello+world

RESTとクエリ文字列パラメータを使用して、私はそれが思ったほど悪くAではなく、このタイプのシナリオでは許容可能で呼び出すようですねしかし、もっと良いことをする方法があれば、私はまだそれを聞きたいと思います。ありがとう。

関連する問題