1

この質問はおそらく重複ですが、似たような質問は見つかりませんでした(正確に何を検索すればよいかわかりません)。

次のようなRESTfulリソースURLがあるとします。

/my/items/6/edit

このページには、#6のアイテムを編集できるフォームがあります。フォームを送信すると、PUTX /my/items/6-HTTP-Method-Overrideヘッダーを使用してにPOSTされます。

私の質問は、サーバーハンドラーはどこから値「6」を取得する必要があるかということです。URLから取得する必要がありますか?または、HTTP POSTデータから(たとえば、IDがフォームの非表示の入力フィールドとしてレンダリングされた場合)?

それはURLから来るべきだと私には思えます。しかし、これはそれを取り出すのにもう少し面倒になります。たとえば、.NET MVCでは、コントローラーアクションメソッドから次のように取得できます。

var id = int.Parse(ControllerContext.RouteData.Values["id"].ToString());

...それは価値があるよりも厄介なようです。ただし、HTTP POSTデータから取得した場合、技術的には、アイテム#6のデータをに投稿/配置でき/my/items/7ます。サーバーは引き続きアイテムデータをID#6で保存します。

ここに標準的な方法はありますか?

4

2 に答える 2

1

これを確認してください:http://www.codeproject.com/Articles/190267/Controllers-and-Routers-in-ASP-NET-MVC-3

私は.net開発者ではありませんが、すべてのプラットフォームでのベストプラクティスは、URIテンプレートをコントローラーにマップすることです。ルーターは、そのような情報を解析して準備し、それを関数/メソッドに渡す必要があります。

于 2012-06-02T17:52:34.600 に答える
0

それは間違いなくURLから来るはずです。ASP.NET MVCで、次のように定義されたルートがある場合:

routes.MapRoute(
    "Default",
    "/my/{controller}/{id}/{action}",
    new { controller = "items", action = "Index" }
);

次のように、ActionResultメソッドのシグネチャからIDを参照できます。

[HttpPut]
public ActionResult Index(int id, MyItemEditModel model)
{
    // id would be 6 if the URL was /my/items/6/
    // and the model need not contain the id
    ...
于 2012-06-03T04:21:17.057 に答える