asp.net-mvc - 使用 filterContext 的 MVC5 服务器端重定向
问题描述
我有一个带有 url 重定向的表,以前我使用HttpModule
方法来查询数据库并处理重定向,如果找到的话。但是现在我想重新设计这个功能ActionFilter
有两个原因:
HttpModule
处理所有请求,而我只需要重定向某些类型的内容。在所有其他情况下,这会导致毫无意义的数据库查询。- 我需要附加功能 - 在某些条件下使用301 客户端重定向,其余的默认使用服务器端重定向。
目前HttpModule
我正在使用HttpContext.RewritePath
实现服务器端重定向。我的问题是如何在ActionFilter
.
澄清服务器端重定向:我希望能够从两个不同的链接访问相同的内容。如果courses/programming-basics/details
(verbal url)被重定向到/course/{id}/details
(real action path),我希望能够使用verbal url来访问这个内容。
目前,使用ActionExecutingContext
我正在使用
filterContext.Result = new RedirectResult(url)
这导致301 client-side。
澄清:我希望通过旧网址访问我的内容。按照上面的示例,这会产生一个页面,该页面显示具有两个有效 url 的相同内容:courses/programming-basics/details
和 `course/{id}/details。也许我错误地使用了重定向,但这就是我设法表达我的问题的方式。
解决方案
正如@Andrei 所建议的,我在这里找到了我的问题的解决方案。这条线就足够了:
filterContext.HttpContext.Server.TransferRequest(url);
这返回了正确的内容并保留了旧的、详细的 url。正是我需要的。
推荐阅读
- ember.js - 从自定义组件触发表单提交事件
- r - 在 data.table 中跨组(不在组内)随机排序
- sql - 基于子分组合并重复行
- powershell - 使用类似于 curl 的 Invoke-WebRequest 测量响应时间
- sql - RDF + OWL 推理
- java - spring.core 的这个模块定义有什么问题?
- vba - 使用 Column to Match 加速从数据中提取行的宏
- cakephp - 为直通表上的关联数据生成表单
- gmail-api - 使用 Gmail API 发送的邮件在发送到 Gmail 地址时被标记为可疑
- javascript - nodejs 如何在没有多线程的情况下实现更好的 http 请求性能?