0

次のような Web API アクションがあります。

[HttpPost]
public List<FavoriteDTO> GetFavoritesPaged(long userId, PagingInfo pagingInfo)
{
  var result = _userService.GetFavoritesPaged(fav => fav.UserId == userId, pagingInfo);
  var favDTOs = ConvertToDTOs(result.Source);
  return favDTOs;
}

HttpClient を使用して呼び出す必要があり、次のように試しています。

ページング情報を get メソッドに渡す必要があります。

var pagingInfo = new PagingInfo()
{
    PageIndex = 1,
    PageSize = 10,
    OrderBy = "URL",
    OrderDirection = OrderDirection.Desc
};

OrderDirection は列挙型です。

public enum OrderDirection
  {
    Asc,
    Desc
  }

var detailURI = "Favorites/GetFavoritesPaged?userId="+34;

HttpClient client = new HttpClient()
client.BaseAddress="mywebApiAddress";
var response = client.PostAsJsonAsync(detailURI, pagingInfo).Result;
response.EnsureSuccessCode();
var result = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result,
                                      tyepof(FavoritesDTO));

しかし、それは機能していません。内部サーバーエラーが表示されます。ここで欠落しているものです。列挙型が問題を引き起こしていますか、それとも何か他のものですか? 他の WebAPI は問題なく動作しています。このようなパラメーターを複数持つものはありません。

ここに私のルート構成があります:

public static void Register(HttpConfiguration config)
    {
      config.Routes.MapHttpRoute(
          name: "DefaultApi",
          routeTemplate: "api/{controller}/{id}",
          defaults: new { id = RouteParameter.Optional }
      );
    }

複数のパラメーターを使用して WebAPI を呼び出すのは正しい方法ですか、それともより良い方法がありますか?

EDIT-1:これを 変更しました:

 var detailURI = "Favorites/GetFavoritesPaged?userId?"+34;

に:

var detailURI = "Favorites/GetFavoritesPaged?userId="+34;

それはすべてタイプミスでした:)

編集-2:

EDIT-1 では、リクエストは次の WebAPI メソッドに送られます (これは間違っています)。

    [HttpPost]
    public FavoriteDTO AddToFavorites(FavoriteDTO favoriteDTO)
    {
      ------code to add to db------
    }

しかし、routeConfig を次のように編集すると、次のようになります。

public static void Register(HttpConfiguration config)
{
  config.Routes.MapHttpRoute(
      name: "DefaultApi",
      routeTemplate: "api/{controller}/{action}/{id}",
      defaults: new { id = RouteParameter.Optional }
  );
}

その後、次の例外が発生し始めました。

ReasonPhrase: Not Found
Request: {Method: POST, RequestUri: 'http://localhost:60208/api/Favorite/GetPagedFavorites?user=1', Version: 1.1, Content: System.Net.Http.ObjectContent`1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], Headers:{  Content-Type: application/json; charset=utf-8  Content-Length: 44}}
4

3 に答える 3

3

コントローラー メソッドに ActionName 属性を設定してみてください。次に、ActionName をクエリ文字列に追加します。

/アクション名?パラメータ=値

于 2013-10-07T16:27:55.697 に答える
1

あなたのURLは間違っています。このようにしてみてください:

var detailURI = "Favorites/GetFavoritesPaged?userId=34";

または次の{id}ルートを使用します。

var detailURI = "Favorites/GetFavoritesPaged/34";

ただし、パラメーター名を変更する必要があります。

public List<FavoriteDTO> GetFavoritesPaged(long id, PagingInfo pagingInfo)
于 2013-03-11T11:39:10.743 に答える