一尘不染

使用ASP.NET MVC进行多个参数的路由

c#

我们公司正在为我们的产品开发API,并且我们正在考虑使用ASP.NET
MVC。在设计API时,我们决定使用如下所示的调用,以便用户以XML格式从API请求信息:

http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist=cher&api_key=b25b959554ed76058ac220b7b2e0a026

如您所见,传递了多个参数(即artistapi_key)。在ASP.NET
MVC,artist将是controllergetImages在行动,但我会如何将多个参数传递给动作?

使用上述格式甚至可以做到吗?


阅读 732

收藏
2020-05-19

共1个答案

一尘不染

只需在操作方法中添加参数,即可在MVC中直接支持参数。采取以下操作:

public ActionResult GetImages(string artistName, string apiKey)

当给定URL时,MVC将自动填充参数,例如:

/Artist/GetImages/?artistName=cher&apiKey=XXX

另一种特殊情况是名为“ id”的参数。任何名为ID的参数都可以放入路径中,而不是查询字符串中,因此类似:

public ActionResult GetImages(string id, string apiKey)

可以使用如下网址正确填充:

/Artist/GetImages/cher?apiKey=XXX

另外,如果您有更复杂的方案,则可以自定义MVC用于定位操作的路由规则。您的global.asax文件包含可以自定义的路由规则。默认情况下,规则如下所示:

routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

如果您想支持以下网址

/Artist/GetImages/cher/api-key

您可以添加一条路线,例如:

routes.MapRoute(
            "ArtistImages",                                              // Route name
            "{controller}/{action}/{artistName}/{apikey}",                           // URL with parameters
            new { controller = "Home", action = "Index", artistName = "", apikey = "" }  // Parameter defaults
        );

和上面第一个示例类似的方法。

2020-05-19