【问题标题】:ApiController: Get with same argument but different returnApiController:使用相同的参数但返回不同的获取
【发布时间】:2014-09-10 20:11:08
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 不可能创建具有相同方法签名但返回类型不同的方法。这是在 C# 规范中设计的。

标签: c# get controller


【解决方案1】:

您不需要将函数命名为 Get。

你可以命名它们..

GetItem

GetEntry

【讨论】:

  • 谢谢,我试过了,但是当我启动网站时说有多个条目...
【解决方案2】:

我有点不确定为什么你需要 2 个返回不同结果的 Get 方法,这违背了 Web API 的 Get 方法的原则。一个控制器应该只为其 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 );  
}

这样的事情可能会奏效。我还没有测试过代码。但应该可以。

【讨论】:

    【解决方案3】:

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

    谢谢,我试过了,但是当我启动网站时说有多个条目......

    好吧,如果我请求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 请求来调用它们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-15
      • 2020-10-28
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      相关资源
      最近更新 更多