我有一个 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 工作得很好;它们都没有一个以上这样的参数。
这是我的 routConfig:
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}}