如何在Asp.Net Web API中要求某些路由的查询字符串?
控制器:
public class AppleController : ApiController
{
public string Get() { return "hello"; }
public string GetString(string x) { return "hello " + x; }
}
public class BananaController : ApiController
{
public string Get() { return "goodbye"; }
public string GetInt(int y) { return "goodbye number " + y; }
}
所需路线:
/apple --> AppleController --> Get()
/apple?x=foo --> AppleController --> Get(x)
/banana --> BananaController --> Get()
/banana?y=123 --> BananaController --> Get(y)
解决方法:
只是做这样的事情:
public string Get(int y = -1)
{
if(y < 0) return "goodbye";
return "goodbye number " + y;
}
这样,它是一条路线,并且涵盖所有情况.为了清楚起见,您也可以将每种方法都视为私有方法.
另一种方法是添加更多路由,但是由于这些路由有些特定,因此您必须添加额外的路由.为简单起见,我会说您将方法GetString和GetInt更改为同一件事(例如GetFromId,以便可以重用路由:
routes.MapRoute(
name: "GetFromIdRoutes",
url: "{controller}/{id}",
defaults: new { action = "GetFromId" }
);
routes.MapRoute(
name: "GetRoutes",
url: "{controller}",
defaults: new { action = "Get" }
);
如果您对这些内容的理解不够普遍,则可能会遇到很多路由条目.另一个想法是将它们放到区域中以避免路线冲突.