11

我正在寻找一些关于在 MVC 中使用 C# 进行路由的信息。我目前非常了解 MVC 中路由的基础知识,但我正在寻找的东西有点难以找到。

实际上,我想要找到的是一种定义采用单个参数的单个路由的方法。

我在网上找到的常见示例都是基于示例

routes.MapRoute(
    "Default",
    "{controller}.mvc/{action}/{id}"
    new { controller = "Default", action="Index", id=""});

通过映射这个路由,你可以映射到任何控制器中的任何动作,但是如果你想将任何东西传递给动作,方法参数必须称为“id”。如果可能的话,我想找到一种解决方法,这样我就不必为了在我的操作中使用不同的参数名称而不断地指定路由。

有没有人有任何想法,或找到解决这个问题的方法?

4

5 回答 5

7

如果您想使用不同的参数名称保持相同的路由变量,请使用 FromUri 属性,如下所示:

public ActionResult MyView([FromUri(Name = "id")] string parameterThatMapsToId)
{
   // do stuff
}

在您的路线中,您只需要:

routes.MapRoute(
  "Default",
  "{controller}.mvc/{action}/{id}"
  new { controller = "Default", action="Index", id=""});
于 2013-03-13T18:50:21.097 回答
5

我认为你不能完全按照你的要求去做。当 MVC 调用一个动作时,它会在路由、请求参数和查询字符串中查找参数。它总是在寻找匹配参数名称。

也许好的旧查询字符串会满足您的需求。

~/mycontroller/myaction/?foobar=123

将 123 传递给此操作:

public ActionResult MyAction(int? foobar)
于 2008-12-05T21:45:12.130 回答
3

我知道这是几个世纪前的事了,但希望它仍然对某人有所帮助。我之前问过同样的问题。我想这就是你要找的。从我的问题帖子中引用的答案:“{*pathInfo} 位称为 slug。它基本上是一个通配符,表示“此后的所有内容都填充到一个名为 pathInfo 的参数中”。因此,如果您有“{resource}.axd/ {*pathInfo}" 和这样的 url:http://blah/foo.axd/foo/bar/baz/bing然后创建两个参数,一个称为资源,其中包含 foo,另一个称为 pathInfo,其中包含 foo/bar/baz/bing。"

于 2012-06-16T11:19:24.750 回答
0

您可以根据需要构建路线

routes.MapRoute(
    "Default",
    "{controller}.mvc/{action}/{param1}/{param2}/{param3}"
    new { controller = "Default", action="Index", param1="", param2="", param3=""});

另外,看看这篇文章,它在评论部分包含所有类型的示例

于 2008-12-05T12:35:19.247 回答
0

尽管您仍然不能使用该FromUri属性,但是您可以使用该Route属性,如下所示

[Route("~/Policy/PriorAddressDelete/{sequence}")]
public ActionResult PriorAddressDelete(int sequence)
{
  Policy.RemoveScheduledPriorAddressItem(sequence);
  return RedirectToAction("Information", new { id = Policy.Id });
}

从技术上讲,这增加了一条新路线,但至少它不会弄乱你的routeconfig. 它将路线定义放在我喜欢的地方,这是我喜欢的(少找东西)。

请记住,为了使用属性路由,这必须在您定义的路由上方的 routeconfig 文件中:

routes.MapMvcAttributeRoutes();
于 2017-04-13T15:19:03.163 回答