我开始实现ApiController。我有多个具有不同参数和各种返回类型的get函数。
实际上,我有一个服务类,我为每个服务实现了一个get函数。
问题是我现在在同一个控制器中有两个函数,它们采用相同的参数但返回不同的类型。例如:
[HttpGet]
string Get(String item){ return "Test";}
[HttpGet]
int Get(String entry){ return 2;}
我无法开始编译,因为Visual Studio说这些函数是相似的。我该如何解决这个问题?
答案 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/123
和MyController/Entry/123
答案 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 );
}
这样的事情可行。我没有测试过代码。但应该工作。