【问题标题】:.NET Web API custom return value.NET Web API 自定义返回值
【发布时间】:2013-08-26 00:28:44
【问题描述】:

我在使用 Web API 时遇到了一些问题,标准文档对我没有多大帮助..

我有一个ProductsController,带有一个默认方法GetAllProducts(),它接受几个GET参数(这种方式更容易实现)用于查询。

现在,在应用程序的另一部分,我使用了一个 jQuery 自动完成插件,它必须查询我的 web 服务并过滤数据。问题是,它需要自定义格式的结果,这与 Web API 返回的格式不同。我继续创建另一个方法GetProductsByQuery(string query),它应该以该格式返回数据。

有什么方法可以强制 WebAPI 以我想要的方式返回数据,而无需创建另一个控制器?

我的路由表也有问题,因为所有 GET 都直接转到第一种方法,即使我将第二种方法路由到 url: "{controller}/query/{query}"

这里有一些代码:

公共类 ProductsController : 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}");

【问题讨论】:

  • 请发布您的代码。
  • 对,错过了。我发布了一个精简版的代码,我已经尝试过
  • 您不必从 ProductsController 返回 Products,您可以返回任何您想要的。只需返回与调用者期望的合同匹配的自定义对象(假设它需要 json 输出)。

标签: c# asp.net asp.net-mvc asp.net-web-api


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 2013-04-21
    • 2021-05-04
    • 2017-09-25
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多