【问题标题】:How can I specify the url address in Asp.NET MVC redirect-to-action如何在 Asp.NET MVC 重定向到操作中指定 url 地址
【发布时间】:2012-12-26 18:33:47
【问题描述】:

在 MVC 中是否有办法在执行重定向操作后指定浏览器 url 地址?在我的代码中,我有

RedirectToAction("myaction", "mycontroller", new {arg1= "height", arg2="weight"})

浏览器中显示的地址是:

http/mywebsite/mycontroller/myaction?arg1=height&arg2=weight

然而,我希望出现在浏览器 url 中的是:

http://mywebsite/height/weight

有没有办法做到这一点?

【问题讨论】:

  • 您使用哪种语言和 MVC 框架?
  • 请不要将“ASP.NET MVC”简称为“MVC”。一种是框架,另一种是与语言无关的设计模式。这就像调用 IE - “互联网”

标签: asp.net-mvc url-rewriting


【解决方案1】:

您需要添加一个特定的路由来实现这一点,只需在 Global.asax.cs 中添加一个 MapRoute 到您的应用程序开始:

protected void Application_Start()
{
    RouteTable.Routes.MapRoute("myRouteName",
        "/{height}/{weight}",
        new { controller = "mycontroller", action = "myaction" },
        new[] { "Namespace.Of.My.Controller" });
}

【讨论】:

  • 克罗诺斯,非常感谢您的回答。我的申请更复杂。我的应用程序允许用户创建虚拟资源,例如我的身高/体重示例。我真的无法预先定义他们可能定义的内容,因此,身高/体重只是一个例子。它可能更多,height1/weight1 等(所有这些虚拟资源映射相同的内部资源,但我不希望用户看到它们)。我真的不能用 MapRoute 硬编码这样的列表。无论采用何种解决方案,它都需要在运行时保持灵活性。如果您有任何想法,请告诉我。 -thx
  • 我相信您可以像许多基于 MVC 的 CMS 一样,在应用程序生命周期的任何时候动态映射路由。
  • 我知道你想要干净的 URL,但我不认为重写 URL 是一个好方法。它会给你带来一系列新的问题。例如,您可能必须回读这些 URL,而在我看来,它主要是在现有路由系统之上重建 MVC 路由系统。或者我只是不明白你想要什么,祝你好运:)
  • Krons,应用非常复杂。有没有一种方法可以在创建 Response 对象时简单地设置 url?我知道我可以访问此对象,但不确定是否可以更改。
  • 我从版本 1 开始使用 ASP.NET MVC,据我所知,仅有的两种“重写”类型是:1 路由,2 重定向(301、302,...)。重定向=无论如何路由,因为如果用户刷新页面,您希望服务器再次将请求路由到正确的资源。对不起,我没有想法,祝你好运:)
猜你喜欢
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 2010-10-23
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
相关资源
最近更新 更多