获取完整的请求URL,包括控制器中的参数

时间:2008-11-04 09:38:44

标签: asp.net-mvc url

如何在控制器中获取完整的请求URL(包括查询字符串)?是连接我的URL和表单参数还是有更好的方法。

我查了this个问题,但似乎不适用于MVC。

如果我错了,请纠正我。

更详细的信息:

我对SearchController.AdvancedSearch()的电话来自一个包含大约15个可选参数的表单。由于参数的数量并且没有可能的方法(我认为)以干净的方式传递可选参数,我去了一个在控制器中处理的catchall字符串。

现在我希望我的控制器将其调用存储在breadcrumb组件中,这样当单击crumb时,可以获取完全相同的结果(包括所有但不多的参数)。为此,我需要整个request.URL,包括查询字符串

Request.RawURLrequest.URL等中,不包含此查询字符串。事实上,目前我做的很简单。

String.Format("{0}/{1}", request.Url, request.form)

这给了我一些奇怪的结果(比如提交按钮值等),但它有效。如果有关于如何减少这种丑陋黑客的建议,请告诉我们。

我知道在哪里可以找到当前请求,但我似乎无法在任何地方找到原始网址。他们都被剥夺了查询串,我也需要这一点。

我的控制器更新了BreadCrumb组件中的一组网址。因此它需要请求URL。你怎么建议我接受这个问题?

5 个答案:

答案 0 :(得分:43)

您可以使用Request.Url.PathAndQuery

MVC5:使用 Request.RequestUri.PathAndQuery

答案 1 :(得分:23)

HttpContext.Current.Request.RawUrl
HttpContext.Current.Request.QueryString

至于你的第二个问题。而不是跟踪您的用户去过的网址,查询字符串信息等。跟踪调用的控制器和操作。这将完全取消对Request对象的需求。

答案 2 :(得分:2)

您可以使用以下方式获取当前的Request对象:

HttpContext.Current.Request

但是,我要问 - 你为什么要这个请求网址?通过这样做,你已经使你的控制器依赖于Request对象,这将使你的单元测试更难写。

答案 3 :(得分:2)

Request.RawUrl

使用此属性返回所有网址。

答案 4 :(得分:0)

在控制器中,您可以访问Request.RawUrl