5

次のメソッドを持つコントローラーがあるとします。

public int Get(DateTime date)
{
    // return count from a repository based on the date
}

URI自体の一部として日付を渡しながらメソッドにアクセスできるようにしたいのですが、現在、日付をクエリ文字列として渡すときにしか機能しません。例えば:

Get/2012-06-21T16%3A49%3A54-05%3A00 // does not work
Get?date=2005-11-13%205%3A30%3A00 // works

これを機能させる方法はありますか?カスタム MediaTypeFormatters をいじってみましたが、それらを HttpConfiguration の Formatters リストに追加しても、実行されないようです。

4

2 に答える 2

3

デフォルトのMVCルーティングコードを見てみましょう。

routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new {controller = "Home", action = "Index", **id** = UrlParameter.Optional}
            );

わかった。名前IDを参照してください?メソッドパラメータに「id」という名前を付けて、モデルバインダーがバインドすることを認識できるようにする必要があります。

これを使って -

public int Get(DateTime id)// Whatever id value I get try to serialize it to datetime type.
{ //If I couldn't specify a normalized NET datetime object, then set id param to null.
    // return count from a repository based on the date
}
于 2012-07-08T08:42:46.833 に答える
3

URI自体の一部として渡す場合は、Global.asaxで定義されているデフォルトのルーティングを考慮する必要があります。変更していない場合は、URIが/ Controller / action/idに分類されることを示しています。

たとえば、uri'Home / Index / hello'は、HomeControllerクラスのIndex( "hello)に変換されます。

したがって、この場合、DateTimeパラメーターの名前を「date」ではなく「id」に変更すると機能するはずです。

また、パラメータのタイプを「DateTime」から「DateTime?」に変更する方が安全な場合があります。エラーを防ぐため。また、2つ目の注意として、mvcパターンのすべてのコントローラーメソッドはActionResultオブジェクトを返す必要があります。

幸運を!

于 2012-07-08T08:36:00.400 に答える