关于asp.net mvc:获取完整的请求url,包括控制器中的参数

Get full request url, including parameters in controller

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

我查过这个问题,但似乎不适用于MVC。

如果我错了就纠正我。

一些更详细的信息:

我对我的SearchController.AdvancedSearch()的调用来自一个带有大约15个可选参数的表单。因为参数的数量多,而且(我认为)没有可能以干净的方式传递可选参数,所以我选择了一个在控制器中处理的catchall字符串。

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

Request.RawURLrequest.URL等中,不包括该查询字符串。事实上,我现在做的是一个简单的函数。

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

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

我知道在哪里可以找到当前的请求,但似乎在任何地方都找不到原始的URL。它们都被从查询字符串中剥夺了,我也需要这个位。

我的控制器在我的BreadCrumb组件中更新一组URL。因此,它需要请求URL。你建议我如何处理这个问题?


您可以使用Request.Url.PathAndQuery

MVC5:使用request.requesturi.pathandquery


1
2
HttpContext.Current.Request.RawUrl
HttpContext.Current.Request.QueryString

至于你的第二个问题。而不是跟踪用户访问的URL、查询字符串信息等。跟踪调用的控制器和操作。这将完全消除对请求对象的需求。


1
Request.RawUrl

使用此属性是返回所有URL。


您可以使用以下方法获取当前请求对象:

1
HttpContext.Current.Request

但是,我要问——为什么你想要请求URL?通过这样做,您已经使控制器依赖于请求对象,这将使单元测试更加难以编写。


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