231

次の WebAPI メソッドを実装する必要があります。

/api/books?author=XXX&title=XXX&isbn=XXX&somethingelse=XXX&date=XXX

クエリ文字列パラメーターはすべて null にすることができます。つまり、呼び出し元は 0 から 5 つのパラメーターすべてを指定できます。

MVC4ベータ版では、次のことを行っていました。

public class BooksController : ApiController
{
    // GET /api/books?author=tolk&title=lord&isbn=91&somethingelse=ABC&date=1970-01-01
    public string GetFindBooks(string author, string title, string isbn, string somethingelse, DateTime? date) 
    {
        // ...
    }
}

MVC4 RC は、このような動作をしなくなりました。指定したパラメーターが 5 つ未満の場合、次のようなメッセージが返されます404

要求に一致するアクションがコントローラ 'Books' で見つかりませんでした。

URL ルーティングでオプションのパラメーターを指定しなくても、以前と同じように動作させるための正しいメソッド シグネチャは何ですか?

4

5 に答える 5

323

この問題は、MVC4 の通常のリリースで修正されています。これで、次のことができます。

public string GetFindBooks(string author="", string title="", string isbn="", string  somethingelse="", DateTime? date= null) 
{
    // ...
}

そして、すべてが箱から出して動作します。

于 2012-09-12T11:39:07.843 に答える
76

以下のように、すべてのパラメータに初期デフォルト値を使用します

public string GetFindBooks(string author="", string title="", string isbn="", string  somethingelse="", DateTime? date= null) 
{
    // ...
}
于 2012-08-08T11:59:05.050 に答える
1

複数のパラメーターを渡したい場合は、複数のパラメーターを渡す代わりにモデルを作成できます。

パラメータを渡したくない場合は、そのパラメータもスキップできます。コードはすっきりときれいに見えます。

于 2012-09-12T11:51:18.710 に答える
1

optional' 'が宣言されていないパラメータにはデフォルト値を指定できません

 Function GetFindBooks(id As Integer, ByVal pid As Integer, Optional sort As String = "DESC", Optional limit As Integer = 99)

あなたのWebApiConfig

 config.Routes.MapHttpRoute( _
          name:="books", _
          routeTemplate:="api/{controller}/{action}/{id}/{pid}/{sort}/{limit}", _
          defaults:=New With {.id = RouteParameter.Optional, .pid = RouteParameter.Optional, .sort = UrlParameter.Optional, .limit = UrlParameter.Optional} _
      )
于 2013-02-21T10:54:35.313 に答える