C# ApiController:使用相同参数但返回不同的Get

C# ApiController:使用相同参数但返回不同的Get,c#,get,controller,C#,Get,Controller,我开始实现ApiController。我有多个get函数,具有不同的参数和不同的返回类型 实际上,我有一个服务类,我为每个服务类实现一个get函数 问题是,我现在在同一个控制器中有两个函数,它们接受相同的参数,但返回不同的类型。例如: [HttpGet] string Get(String item){ return "Test";} [HttpGet] int Get(String entry){ return 2;} 我无法开始编

我开始实现ApiController。我有多个get函数,具有不同的参数和不同的返回类型

实际上,我有一个服务类,我为每个服务类实现一个get函数

问题是,我现在在同一个控制器中有两个函数,它们接受相同的参数,但返回不同的类型。例如:

     [HttpGet]
     string Get(String item){ return "Test";}
     [HttpGet]          
     int Get(String entry){ return 2;}

我无法开始编译,因为VisualStudio说这些函数是相似的。如何继续解决此问题?

您不需要命名Get函数

你可以说出他们的名字

GetItem


正如其他人所说,您必须为您的方法选择不同的名称


谢谢,我试着这么做,但当我启动网站时,我说有多个条目

那么,如果我请求GET mywebsite.com/MyController/123,您的两个方法中会调用哪一个

您需要创建两个自定义路由,每个方法一个,这样ASP.NET将知道调用哪个路由。将这些添加到您的WebApiConfig.cs


并通过向MyController/Item/123和MyController/Entry/123发出GET请求来调用它们,我有点不确定为什么需要两个返回不同结果的GET方法,这违背了Web API的GET方法的原则。一个控制器应该只为其get方法返回一种类型的对象。这就是为什么它被称为WebAPI

但是如果你真的需要它,那么你可以用一个Get方法,返回一个对象中的多个数据-

public class WData{
    public string Item {get;set;}
    public int Entry {get;set;}
}

public class RQuery
{
    public string item { get; set; }
    public string entry { get; set; }
}


public IHttpActionResult Get ([FromUri] RQuery query)
{
    WData data = new WData();

    if (!String.IsNullOrEmpt(query.item))
        data.Item = "Test";

    if (!String.IsNullOrEmpt(query.entry))
        data.Entry = 2;

    return Ok(data );  
}

像这样的东西可能有用。但是我还没有测试代码。但是应该可以工作。

谢谢,我试过这么做,但是当我启动网站时,我说有多个条目……不可能创建具有相同方法签名但返回类型不同的方法。这是在C规范中设计的。
   config.Routes.MapHttpRoute(
            name: "GetItem",
            routeTemplate: "api/MyController/Item/{item}",
            defaults: new {controller = "MyController", action = "GetItem"}
            );

   config.Routes.MapHttpRoute(
            name: "GetEntry",
            routeTemplate: "api/MyController/Entry/{entry}",
            defaults: new {controller = "MyController", action = "GetEntry"}
            );
public class WData{
    public string Item {get;set;}
    public int Entry {get;set;}
}

public class RQuery
{
    public string item { get; set; }
    public string entry { get; set; }
}


public IHttpActionResult Get ([FromUri] RQuery query)
{
    WData data = new WData();

    if (!String.IsNullOrEmpt(query.item))
        data.Item = "Test";

    if (!String.IsNullOrEmpt(query.entry))
        data.Entry = 2;

    return Ok(data );  
}