C#-Asp.Net Web API路由-必需的QueryString参数

如何在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" }
);

如果您对这些内容的理解不够普遍,则可能会遇到很多路由条目.另一个想法是将它们放到区域中以避免路线冲突.

上一篇:php – Yii-如何在模块中添加urlManager规则?


下一篇:使用错误的出口接口的python scapy