我在Web API方面遇到了一些问题,标准文档对我帮助不大。。
我有一个ProductsController
,它有一个默认的方法GetAllProducts()
,它接受几个用于查询的GET参数(这样更容易实现)。
现在,在应用程序的另一部分中,我使用了一个jQuery自动完成插件,它必须查询我的Web服务并过滤数据。问题是,它期望结果为自定义格式,这与Web API返回的格式不同。我继续创建另一个方法GetProductsByQuery(string query)
,它应该以该格式返回数据。
有没有什么方法可以强制WebAPI按我想要的方式返回数据,而不需要制作另一个控制器?
我的路由表也有问题,因为所有的GET都直接转到第一种方法,即使我将第二种方法路由到url: "{controller}/query/{query}"
这里有一些代码:
公共类产品控制器:ApiController{
public IEnumerable<Product> GetAllProducts() { NameValueCollection nvc = HttpUtility.ParseQueryString(Request.RequestUri.Query); // Querying EF with the parameters in the query string return returnQuery; } [System.Web.Mvc.HttpGet] public dynamic GetProductsByQuery(string query) { return SomeCustomObject; }
以及路由:
routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( name: "Query", url: "{controller}/query/{query}");
您需要交换路由-任何与您的第二条路由匹配的请求都将首先与您的第一条路由匹配。
其次,如果您需要特定的数据返回格式,请查看自定义媒体格式化程序:
http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters