18


3

ASP.NET MVC + IIS7 + FireFox:URLの末尾のスラッシュ

注:私は何時間も答えを掘りましたが、見つけられませんでした。

IIS7(統合モード)でホストされているASP.NET MVC(2.0)アプリケーションがあります。

GETリクエストが / Toons / List`に対して行われた場合-期待される / Toons / List / `へのリダイレクト(302)を取得します。

問題 +しかし、* POST リクエストを送信すると、 / Toons / Add(末尾のスラッシュがないことに注意)にサーバーが戻り、再び(302)を` / Toons / Add / にリダイレクトします。 この時点で、FireFoxは誤って GET *要求をそのリダイレクト先URLに送信します。 I.e. `[POST] / Toons / Add /`の代わりに `[GET] / Toons / Add /。 これは正しくありませんが、既知の動作です。 `/ Toons / Add /`には[GET]がないため、リソースが見つかりません(404)。

webhost4lifeでアプリをホストし、IIS7にアクセスできません。これにより、URLの書き換えとモジュールの使用が制限されます(この問題を回避するために作業しています)。 しかし、それでも、ISAPIが最善の方法ですか? 私はこの方法でそれを行うのが良いと感じるほど十分に知りません。

これは一般的な問題になりました。これに対する簡単な解決策が見つからなかったことに驚いています。

aspx / .mvcサフィックスを使用せずに、URLを書き換えるソリューションはありますか? +これら2つのうち、必要な場合、どちらを優先すべきですか?

何かアイデアや提案はありますか?

編集:+スラッシュ( /)をすべてのURLに追加したソリューションを見ましたが、これも最もエレガントなソリューションではないようです。

3 Answer


1


リンクするときは、実際のURL /ルートを使用する必要があります。 ホスティング環境またはMVCフレームワークの2.0バージョンの制限のためにルートからスラッシュを削除できない場合は、URLに末尾のスラッシュを含める必要があります。

サーバーに依存してすべてのURLをリダイレクトすると、サーバーの処理時間とページのロード時間が増加します。


0


IISに302ではなく307を返すように指示できますか?


0


HttpVerbsを受け入れるようにコントローラーでアクションメソッドを設定しましたか? Global.asaxで/ Toons / Addのルートを設定してみて、MVCが/ Controller / Method /として読み取らないようにすることもできます。