我在Web API中有此方法
public class ProjectsController : ApiController
{
[HttpGet]
public string GetProjects(string searchKeyword, int startRow, int endRow)
{
DataSet dsResult = ProjectsDB.GetProjects(searchKeyword, startRow, endRow);
if (dsResult == null)
{
dsResult = new DataSet();
}
return JsonConvert.SerializeObject(dsResult, Formatting.Indented);
}
}
和路由配置为
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
和
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
调用函数是:
private async Task<List<Project>> GetProjects(ResultFilters model)
{
HttpResponseMessage httpResponse = null;
string response = null;
List<Project> lstProjects = new List<Project>();
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(GlobalConstants.WebAPIURL + "/api/Projects/GetProjects");
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpResponse = await client.PostAsJsonAsync(client.BaseAddress, model).ConfigureAwait(false);
if (httpResponse.IsSuccessStatusCode)
{
response = httpResponse.Content.ReadAsStringAsync().Result;
lstProjects = JsonConvert.DeserializeObject<List<Project>>(response);
}
}
return lstProjects;
}
ResultFilters对象具有API方法所需的参数值。
上面的代码未返回任何数据,我怀疑API未命中或可能是路由问题。我也没有运气去调试Web API。
答案 0 :(得分:1)
您有一个GET方法,并对它发出了POST。
我怀疑您希望它是POST,因此请更改API方法上的HTTP动词。
接下来,检查您的模型并确保其符合API方法的要求。
模型应如下所示:
public class ResultFilters {
public string searchKeyword { get; set; }
public int startRow { get; set; }
public int endRow { get; set; }
}
您的API方法将如下所示:
[HttpPost]
public string FilterProjects([FromBody] ResultFilters filters)
{
DataSet dsResult = ProjectsDB.GetProjects(filters.searchKeyword, filters.startRow, filters.endRow);
if (dsResult == null)
{
dsResult = new DataSet();
}
return JsonConvert.SerializeObject(dsResult, Formatting.Indented);
}
当然,您需要查看您的方法名称,没有任何 GetProjects 方法(即 POST )。我实际上在答案中将其重命名,因为我无法忍受 Get这是POST 谬论。
如果要将其更改为get,则可以使用FromURI属性,当然也可以相应地更改调用代码。