ApiController:获得相同的参数但返回不同

时间:2014-07-16 08:13:59

标签: c# get controller

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

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

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

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

我无法开始编译,因为Visual Studio说这些函数是相似的。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

您无需命名函数Get。

你可以为他们命名..

GetItem

GetEntry

答案 1 :(得分:0)

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

  

谢谢,我试图这样做但是当我启动网站时说有多个条目...

好吧,如果我请求GET mywebsite.com/MyController/123,你的两个方法中的哪一个会被调用?

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

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

通过向MyController/Item/123MyController/Entry/123

发出GET请求来呼叫他们

答案 2 :(得分:0)

我有点不确定为什么你需要2个返回不同结果的Get方法,这违反了Web API的Get方法原则。一个Controller应该只为其get方法返回一种类型的对象。这就是它被称为Web API的原因。

但是如果你真的需要这个,那么你可以用一个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 );  
}

这样的事情可行。我没有测试过代码。但应该工作。