2

ASP.NETWebAPIルーティングに問題があります。具体的には、空であるか、URI内にスラッシュを含む文字列パラメーターを渡したいと思います。しかし残念ながら、これはルーティングを壊します。

私はすでに適切なルートを設定しています。これは、「fubar」などの通常の文字列がある場合は問題なく一致します。エンコードされた文字列urlを渡そうとしましたが、これは機能しません。どうやら問題は、一部のhttp sysレイヤーがすでに文字列をデコードしていることです。つまり、"fu%2fbar"到着していませんが、"fo/bar"別のルートにつながります。

また、空の文字列を渡すと、URIは"api//..."、2つ/がマージされ、セグメントが破棄されます。

内部の問題を解決する1つの方法/は、URIを二重エンコードし、メソッド内でデコードすることです。しかし、これは非常に悪い選択肢のように思われるので、この問題を解決する方法について他の方法を探しています。

4

2 に答える 2

1

スラッシュの場合、特別なルートを準備できます

            "{controller}/{action}/{param1}/{param2}/{param3}"
            "{controller}/{action}/{param1}/{param2}"
            "{controller}/{action}/{param1}"


    public ActionResult Index(string param1, string param2, string param3)
    {
        string param = string.Concat(param1, param2, param3);

このように、fuとbarは2つのパラメーターです。

空の文字列に対する解決策はありません。クライアントアプリでスペース文字または「空」を意味するがそうではない何かに置き換えます

于 2013-01-20T11:37:20.713 に答える
0

次のいずれかをお勧めします。

  1. リクエスト タイプを POST に変更し、文字列をリクエストの本文に入れる

  2. または、無効な文字を置き換えるなどして、リクエストを取得し、URL のパラメーターを書き換えるインターセプター (DelegatingHandler) を追加します。

于 2013-01-20T14:27:32.080 に答える