【发布时间】:2018-05-22 09:08:06
【问题描述】:
我有一个带有 url 重定向的表,以前我使用HttpModule 方法来查询数据库并处理重定向,如果找到的话。但是现在我想在 ActionFilter 中重新设计这个功能,原因有两个:
-
HttpModule处理所有请求,而我只需要重定向某些类型的内容。在所有其他情况下,这会导致毫无意义的数据库查询。 - 我需要额外的功能 - 在某些条件下使用 301 客户端重定向,而在其余情况下默认使用 服务器端重定向。
目前在我的HttpModule 中,我使用HttpContext.RewritePath 来实现服务器端重定向。我的问题是如何在ActionFilter 中获得相同的结果。
澄清服务器端重定向:我希望能够从两个不同的链接访问相同的内容。如果courses/programming-basics/details(口头网址)被重定向到/course/{id}/details(实际操作路径),我希望能够使用口头网址访问此内容。
目前,我正在使用ActionExecutingContext
filterContext.Result = new RedirectResult(url)
这会导致 301 客户端。
澄清:我希望通过旧网址访问我的内容。按照上面的示例,这会导致一个页面显示具有两个有效 url 的相同内容:courses/programming-basics/details 和 `course/{id}/details。也许我错误地使用了重定向,但这就是我设法表达我的问题的方式。
【问题讨论】:
-
只需为您的操作设置正确的路由,您就可以了。不需要 IIS 模块或操作过滤器。
-
服务器重定向在 MVC 中似乎很重要,但可以做到:stackoverflow.com/q/799511/728795。但是@haim770 是对的——你也可以通过路由来解决这个问题
-
@alex 301 客户端重定向是什么意思?,它发生在服务器端。
-
@haim770 我不确定“正确路由”是什么意思。重写所有路线不是一种选择,因为我们正在谈论一个中型到大型应用程序。
url redirects是向后兼容所必需的,而且旧网址非常易于阅读,这对营销来说是一个加分项。 -
@Adrian 是的,它发生在服务器上。但是,301 响应包含重定向的位置。然后客户端对所需的 Url 执行另一个请求。我已经看到这被称为客户端重定向。不确定它在语义上是否完全正确。
标签: asp.net-mvc redirect