C# ApiController:使用相同参数但返回不同的Get
我开始实现ApiController。我有多个get函数,具有不同的参数和不同的返回类型 实际上,我有一个服务类,我为每个服务类实现一个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;} 我无法开始编
[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 );
}