Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET Web API自定义返回值_C#_Asp.net_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

C# .NET Web API自定义返回值

C# .NET Web API自定义返回值,c#,asp.net,asp.net-mvc,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,我在Web API方面遇到了一些问题,标准文档对我帮助不大 我有一个ProductsController,带有一个默认方法GetAllProducts(),它接受多个GET参数(这种方法更容易实现)进行查询 现在,在应用程序的另一部分中,我使用jQuery自动完成插件,它必须查询我的Web服务并过滤数据。问题是,它希望结果采用自定义格式,这与Web API返回的格式不同。我继续创建另一个方法,GetProductsByQuery(字符串查询),它应该以该格式返回数据 有没有什么方法可以强制Web

我在Web API方面遇到了一些问题,标准文档对我帮助不大

我有一个
ProductsController
,带有一个默认方法
GetAllProducts()
,它接受多个GET参数(这种方法更容易实现)进行查询

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

有没有什么方法可以强制WebAPI返回我想要的数据,而不需要另一个控制器

我还遇到了路由表的问题,因为所有的get都直接转到第一个方法,即使我将第二个方法路由到
url:“{controller}/query/{query}”

下面是一些代码:

公共类产品控制器:ApiController {


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

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


请发布您的代码。对,没有看到。我发布了一个精简版的代码,通过我的测试,您不必从ProductsController返回产品,您可以返回任何您想要的。只需返回与调用方期望的合同相匹配的自定义对象(假设它需要json输出)。
    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}");