3

我需要更改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 Routesurl.com/mypage. 问题是,当我键入时,URL我被重定向(这是我想要的行为)到url.com/otherpage/actionX?param=value. 问题是我仍然希望地址栏显示url.com/mypage。会URL Rewrite为此工作吗?我问是因为我不知道它是否会起作用,因为它是内部重定向(RedirectToAction)而不是“常规”访问。如果有人想知道为什么我不能为此制定路线,正如我的问题中所解释的那样,我已经有一条规则可以url.com/mypage重定向到决定调用什么操作的“路由器”。

我看到了一些问题,但我认为它们没有涵盖我的具体问题:

MVC3 更改网址

C# - 如何在 MVC3 中重写 URL

更新

这是我的路线:

routes.MapRoute(
    "Profile", // Route name
    "{urlParam}", // URL with parameters
    new { controller = "Profile", action = "Router" } // Parameter defaults
);

在内部Router操作中,我根据对urlParam. 我需要这种行为,因为每个动作都返回不同的View.

更新了我的标签,因为我现在使用的是 MVC4

谢谢。

4

4 回答 4

0

在我看来,您可以尝试以下操作:

  1. 从您的 Action 方法返回 EmptyResult 或 RedirectResult。
  2. 此外,您需要为所需的 URL 设置和构建出站路由。

其次,如果这些都不起作用,处理这种情况的粗略方法是使用 Div 标签并将 Div 的内容替换为 Action 方法发出的任何 HTML。我在这里假设在您的问题上下文中,您可以调用 jquery ajax 调用。

希望这可以帮助。

于 2013-05-09T07:09:00.947 回答
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保持不变。

以此为基础,您可以构建重写(而不是重定向)。

于 2013-05-07T12:07:16.833 回答
0

Server.Transfer正是您所需要的,但这在 MVC 上不可用。

在 MVC 世界中,您可以使用此线程中定义的 TransferResult 类。

有了这个......您将代码添加到您的 ROUTE 操作中,该操作一如既往地处理 urlParam,而不是将用户“重定向”(RedirectToAction)到新的 URL,您只需将他/她“转移”到新的操作方法而不更改网址。

但是有一个问题(我想,我还没有测试过)......如果那个新页面回发了一些东西......它不会使用你的路由器的操作 URL(url.com/mypage),而是真正的 ACTION(url. com/其他页面)

希望能帮助到你。

于 2013-05-08T17:33:54.510 回答
-1

您遇到的问题是您将用户(使用 302 http 代码)重定向到新位置,因此浏览器会重新加载页面。您需要修改路由以直接指向您的控制器。路由注册应该是 routes.MapRoute("specific", "my page", new { controller = "otherpage", action="actions", param="value"})。这条路线应该先注册

于 2013-04-03T12:32:12.150 回答