ASP.NET MVC 路由:URL 中的多个参数
ASP.NET MVC Routing: Multiple parameter in URL
我正在尝试将 Web 服务从 PHP 移植到 ASP.NET MVC。当然,这意味着我必须复制现有的 API.
目前,规范形式的调用如下:
http://example.com/book/search?title=hamlet&author=shakes
但是,它也接受另一种形式:
http://example.com/book/search/title/hamlet/author/shakes
大约有五个不同的搜索条件,都是可选的,并且可以按任何顺序给出。
如何在 ASP.NET MVC 路由中做到这一点?
你可以试试这个。
[Route("Book/search/{*criteria}")]
public ActionResult Search(string criteria)
{
var knownCriterias = new Dictionary<string, string>()
{
{"author", ""},
{"title",""},
{"type",""}
};
if (!String.IsNullOrEmpty(criteria))
{
var criteriaArr = criteria.Split('/');
for (var index = 0; index < criteriaArr.Length; index++)
{
var criteriaItem = criteriaArr[index];
if (knownCriterias.ContainsKey(criteriaItem))
{
if (criteriaArr.Length > (index + 1))
knownCriterias[criteriaItem] = criteriaArr[index + 1];
}
}
}
// Use knownCriterias dictionary now.
return Content("Should return the search result here :)");
}
最后一个以 *
为前缀的参数就像一个 包罗万象的 参数,它将在 Book/search 之后的 url 中存储任何内容。
因此,当您请求 yoursite.com/book/search/title/nice/author/jim
时,默认模型绑定器会将值 "title/nice/author/jim" 映射到 criteria 参数。您可以对该字符串调用 Split
方法以获得 url 段的数组。然后将值转换为字典并将其用于搜索代码。
基本上上面的代码将从溢出的数组中读取并根据您在 url.
中传递的内容设置 knownCriteria
字典项的值
我正在尝试将 Web 服务从 PHP 移植到 ASP.NET MVC。当然,这意味着我必须复制现有的 API.
目前,规范形式的调用如下:
http://example.com/book/search?title=hamlet&author=shakes
但是,它也接受另一种形式:
http://example.com/book/search/title/hamlet/author/shakes
大约有五个不同的搜索条件,都是可选的,并且可以按任何顺序给出。
如何在 ASP.NET MVC 路由中做到这一点?
你可以试试这个。
[Route("Book/search/{*criteria}")]
public ActionResult Search(string criteria)
{
var knownCriterias = new Dictionary<string, string>()
{
{"author", ""},
{"title",""},
{"type",""}
};
if (!String.IsNullOrEmpty(criteria))
{
var criteriaArr = criteria.Split('/');
for (var index = 0; index < criteriaArr.Length; index++)
{
var criteriaItem = criteriaArr[index];
if (knownCriterias.ContainsKey(criteriaItem))
{
if (criteriaArr.Length > (index + 1))
knownCriterias[criteriaItem] = criteriaArr[index + 1];
}
}
}
// Use knownCriterias dictionary now.
return Content("Should return the search result here :)");
}
最后一个以 *
为前缀的参数就像一个 包罗万象的 参数,它将在 Book/search 之后的 url 中存储任何内容。
因此,当您请求 yoursite.com/book/search/title/nice/author/jim
时,默认模型绑定器会将值 "title/nice/author/jim" 映射到 criteria 参数。您可以对该字符串调用 Split
方法以获得 url 段的数组。然后将值转换为字典并将其用于搜索代码。
基本上上面的代码将从溢出的数组中读取并根据您在 url.
中传递的内容设置knownCriteria
字典项的值