Asp.net web api WebApi参数
我对WebApi非常陌生,不了解参数映射。 我有一个带有两个参数的HttpGet方法的控制器。在WebApiConfig映射中定义如下Asp.net web api WebApi参数,asp.net-web-api,asp.net-web-api-routing,Asp.net Web Api,Asp.net Web Api Routing,我对WebApi非常陌生,不了解参数映射。 我有一个带有两个参数的HttpGet方法的控制器。在WebApiConfig映射中定义如下 config.Routes.MapHttpRoute( name: "MyActionApi", routeTemplate: "api/{controller}/{action}/{p},{q}"); 这似乎很管用 通过类比,我添加了另一个控制器(DetailsController),它有3个参
config.Routes.MapHttpRoute(
name: "MyActionApi",
routeTemplate: "api/{controller}/{action}/{p},{q}");
这似乎很管用
通过类比,我添加了另一个控制器(DetailsController),它有3个参数HttpGet方法
我补充说
config.Routes.MapHttpRoute(
name: "MyActionApi2",
routeTemplate: "api/{controller}/{action}/{p},{q},{r}");
但是导航到
http://mysite/api/Details/CrossReport/12,14,Peter
给出404错误并说
在与请求匹配的控制器“详细信息”上未找到任何操作
但是像这样航行
http://mysite/api/Details/FilterByDate/12,14?q=10
给出正确的结果
为什么呢?我想像第一种情况一样用逗号分隔。为什么它在第一种情况下有效,而在第二种情况下无效
工作控制器的方法:
public IEnumerable<Order> FilterByDate(DateTime dateStart, DateTime dateEnd).
public IEnumerable FilterByDate(日期时间日期开始,日期时间日期结束)。
不工作:
public IEnumerable<Detail> FilterByDate(DateTime dateStart, DateTime dateEnd, int maxCount)
public IEnumerable FilterByDate(DateTime dateStart、DateTime dateEnd、int maxCount)
两者都有HttpGet属性。您需要定义一个匹配操作。尝试在DetailsController类上添加具有以下签名的操作:
[HttpGet]
public IEnumerable<Detail> CrossReport(string p, string q, string r)
[HttpGet]
公共IEnumerable交叉报告(字符串p、字符串q、字符串r)
正如您所看到的,操作名称和参数名称必须与路由上的名称相匹配。一个想法是,您是否确保在路由配置中MyActionApi前面有MyActionApi?如果我没有弄错的话,它会寻找第一个可能的匹配。。。因此MyActionApi将匹配(即使有3个参数)WebApi中有两种类型的参数:routes中的参数和body/url中的参数 路由中的参数 在本例中,id参数位于路由中
http://mysite/api/Details/CrossReport/{id}
路由参数以“/”分隔,并且存在部分路由
http://mysite/api/Details/CrossReport/{id}/{name}/{detailId}
在web api控制器中,您必须:
public IEnumerable<Order> FilterByDate(int id, string name, int detailId)
在您的web api中,控制器是相同的:
public IEnumerable<Order> FilterByDate(int id, string name, int detailId)
消息正文中只能有一个,您必须在消息正文中发送消息,并且您的web api控制器必须接收它们:
public IEnumerable<Order> FilterByDate(MyObject obj)
public IEnumerable FilterByDate(MyObject对象)
请发布您的操作签名请参见编辑后的问题。其中一个示例用于FilterByDate操作,另一个(不起作用)用于crossReport-控制器上的crossReport方法是什么样子的?@Nickolodeon您明白了吗?实际上我明白了(请参见更新后的问题)。但它并没有按照描述的方式工作,即404方式。@Nickolodeon-我在你的帖子中看不到方法交叉报告-你刚刚创建了FilterByDate操作ScrossReport操作签名与FilterByDate完全相同。那么,现在呢?将用于第三个参数。稍后我将阅读更多关于路由的教程,希望以后不会再有这样愚蠢的问题了。感谢大家的参与。
public class MyObject
{
public int Id { get; set; }
public string Name { get; set; }
}
public IEnumerable<Order> FilterByDate(MyObject obj)