[英]Detect requstURI dynamically + ASP.NET Core
我正在使用web.config使用.Net Core设置一些重新定义规则。
<rule name="About Page" stopProcessing="true">
<match url="about.aspx" />
<action type="Redirect" url="/Home/About" redirectType="Permanent" />
</rule>
...
因此,如果用户输入www.test.com/about.aspx ,它将重定向到www.test.com/Home/About页面。
我的问题是如何将用户在URL中输入的内容传递给控制器方法? 例如,在这种情况下, www.test.com / about.aspx ?
我尝试过
var currentURI = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}");
但是该用户检测到重定向的uri(www.test.com/Home/About),而不是最初输入的URL(www.test.com/about.aspx)
我在HomeController
, IActionResult
About
方法中使用以下代码。
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, uri))
HttpRequestMessage
的requestUri
参数目前不是动态的,因此它无法检测到用户在URL中输入的内容。
感谢帮助。
为了更加清楚,让我们描述HTTP请求的流程:
http://www.test.com/about.aspx
http://www.test.com/Home/About
。 http://www.test.com/Home/About
。 第二个请求不包含对原始URL http://www.test.com/about.aspx
任何引用。 这就是为什么您无法在服务器端获取原始url的原因。
如果您的应用程序逻辑需要有关初始URL的信息,那么我在这里看到两个选项:
您可以将原始url作为参数添加到重定向的url中,例如: http://www.test.com/Home/About?orig_url=http://www.test.com/about.aspx
: http://www.test.com/Home/About?orig_url=http://www.test.com/about.aspx
: http://www.test.com/Home/About?orig_url=http://www.test.com/about.aspx
您必须使用新模板更新重定向规则,并在ASP.Net Core应用程序中调整路由。
您可以使用路由而不是重定向。 在这种情况下,不会发生301重定向,服务器将使用用户键入的url处理初始请求,但是两个URL都将调用相同的Controller动作。
选择更适合您的方法。 希望这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.