.NET Web API自定义返回值

本文关键字:返回值 自定义 API Web NET | 更新日期: 2023-09-27 18:28:53

我在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}");

.NET Web API自定义返回值

您需要交换路由-任何与您的第二条路由匹配的请求都将首先与您的第一条路由匹配。

其次,如果您需要特定的数据返回格式,请查看自定义媒体格式化程序:

http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters