次のような 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}}