2009-03-20 10 views
4

私はASP.NET MVCを使用してRESTful Webアプリケーションを構築しています.PUTを通じてPUTとDELETE要求をトンネリングする予定です回避策。私はこのようなポストされたフォームデータをトンネルにそれをする必要がありポストまたはURLに_method = PUT/DELETEを格納する必要があります

<form method='post' action='resource?_method=DELETE'> 
    <!-- fields --> 
</form> 

または::

<form method='post' action='resource'> 
    <input type='hidden' name='_method' value='DELETE' /> 
    <!-- fields --> 
</form> 

私が知りたいことは、私はトンネルは、このようなURLを通して情報、すべきです

そして、それぞれの長所と短所は何ですか?

EDIT:私が質問した理由の1つは、このような情報をURLに入れることは、ポストデータが通常失われるために良いことですが、URLはログファイルなど) - 残念ながら、URLは醜いものに見えます。

答えて

2

これはもっと個人的です。 Restful Web Services、OReillyはどちらも同じ意味で説明しています。

私は、プログラマの意図の理由から、最初の方法が好ましいと言います。私はコードを探しています残り、で、私は精神的に

VERB http://someuri.com/someresource/id

動詞を読んで、リソースが近接しています。

PUTとDELETEを使用すると、あなたが示した回避策を使用する必要があります。最初の例では、リソースと動詞は同じ行に接しています。

ただし、2番目の例では、リソースは2行に分割されています。動詞はリソースIDと同じ行に含まれていますが、リソース名からは離れています。それは非常に微妙ですが、私には、2番目の例は読みにくいものになります。

+0

これも私がやって来た結論なので、私はそれを受け入れられた答えとしてマークしています。 HTTPの観点からは、パケットの最初の行には動詞とアクセスするリソースが必要です。それをURLに入れることは、投稿情報に隠すよりも、この理想に近いです。成功したPUTをリダイレクトして関連リソースを取得できるため、ユーザーは実際にはURLを表示しません。 –

+1

動詞をURLに入れることは、操作識別用ではなくリソース識別のためであるため、私は推薦しません。私の視点からは、隠れた入力やメソッドのオーバーライドヘッダーが優れた解決策です。 MIMEタイプのパラメータをフォームのenctypeに追加するプレーンHTMLによる別の解決策かもしれません。 – inf3rno

-1

これらは同等です。

私は自分自身で記事を送信することを希望しますが、主観的ですが

4

あなたはthisを見ましたか?私が理解していることから、x-http-method-overrideヘッダーは、この問題の推奨解決策です。

+1

javascriptが無効になっているブラウザからx-http-method-overrideを使用できますか? –

+0

私はjavascriptが有効になっていなければそれを行う方法を知らない。 –

0

は私が持っていないことが、あなたは使用しないでください。

<form method="put" action="resource"> 
    <!-- fields --> 
</form> 

および/または

<form method="delete" action="resource"> 
    <!-- fields --> 
</form> 

を...?

+0

私は大好きですが、これはほとんどのWebブラウザ(と実際にはHTML/XHTML仕様)でサポートされていません –

+0

私は参照してください。個人的には、私はそれを投稿に入れました。なぜなら、それはリクエストの他のすべての情報があるからです。あなたはそれがURLの方が良いということをどこで読んだのですか? – Charlino

+0

私は覚えがたいですが、URLのようなものが記録されるのは良い点です。リクエストログを確認すると、 'POST/resource'が表示されますか?'POST/resource'ではなく '_method = DELETE' –

関連する問題