我需要更改地址栏上的URL
。
我找了URL Rewrite
,但就我所见,它适用于这样的请求:
url.com/mypage.aspx?xp=asd&yp=okasd
并将其转换为:
url.com/mypage/asd/okasd
http://www.iis.net/downloads/microsoft/url-rewrite
那不是我的范围。我已经MVC Routes
与url.com/mypage
合作了。问题是,当我输入URL
时,我被重定向(这是我想要的行为)到url.com/otherpage/actionX?param=value
。问题是我仍然希望地址栏显示url.com/mypage
。 URL Rewrite
会为此工作吗?
我问,因为我不知道它是否会起作用,因为它是内部重定向(RedirectToAction)而不是'常规'访问。
如果有人想知道为什么我不能为此制定路线,正如我在我的问题中所解释的那样,我已经有一条规则要求url.com/mypage
重定向到“路由器”,该路由器决定要调用什么动作。
我见过一些问题,但我不认为它们涵盖了我的具体问题:
C# - How to Rewrite a URL in MVC3
更新
这是我的路线:
routes.MapRoute(
"Profile", // Route name
"{urlParam}", // URL with parameters
new { controller = "Profile", action = "Router" } // Parameter defaults
);
内部Router
操作我根据urlParam
上的一些验证重定向到正确的操作。我需要这种行为,因为每个操作都会返回不同的View
。
更新了我的标签,因为我现在正在使用MVC4
感谢。
答案 0 :(得分:0)
我曾经不得不在Windows机器上运行一个php网站。在它最初运行的linux机器上,它有一个重写定义,使网站只处理一个php文件(index.php)中的所有请求。
我已使用以下参数安装并配置了URL Rewrite
Name : all to index.php
Match URL ------------------------------
Requested URL : Matches the Pattern
Using : Regular Expressions
Pattern : (.*)
Ignore Case : Checked
Conditions -----------------------------
Logical Grouping : Match All
Input : {REQUEST_FILENAME}
Type : Is Not a File
Action ---------------------------------
Action Type : Rewrite
Action Properties:
Rewrite Url : /index.php?$1
Append Query String : Checked
Log Rewritten URL : Checked
这使得所有对站点的请求(除了css和js文件之类的文件)都由index.php处理
因此url.com/user/1
在服务器端被处理为url.com/index.php?/user/1
因为它适用于服务器端客户端url保持不变。
使用此作为基础,您可以构建重写(而不是重定向)。
答案 1 :(得分:0)
Server.Transfer正是您所需要的,但在MVC上无法使用。
在MVC世界中,您可以使用TransferResult类defined in this thread。
有了这个......你将代码添加到你的ROUTE动作中,它一如既往地处理urlParam而不是“重定向”(RedirectToAction)用户到一个新的URL,你只需将他/她“转移”给一个新的动作方法不改变URL。
但它有一个问题(我认为,我还没有测试过)...如果新页面回发了某些内容......它将不会使用路由器的操作URL(url.com/mypage),而是真正的ACTION (url.com/otherpage)
希望它有所帮助。
答案 2 :(得分:0)
在我看来,你可以试试以下事情:
其次,如果这些不起作用,处理这种情况的粗略方法是使用Div标记并用Action方法发出的任何HTML替换Div的内容。我假设在你的问题上下文中,你可以调用jquery ajax调用。
希望这有助于。
答案 3 :(得分:-1)
您遇到的问题是您将用户(使用302 http代码)重定向到新位置,因此浏览器会重新加载页面。您需要修改路由以直接指向您的控制器。路线注册应该是routes.MapRoute(“specific”,“my page”,new {controller =“otherpage”,action =“actions”,param =“value”})。 该路线应首先注册