使用 web.config 中的 httpRedirect 将 asp.net MVC URL 重定向到特定的控制器/操作/参数

Posted

技术标签:

【中文标题】使用 web.config 中的 httpRedirect 将 asp.net MVC URL 重定向到特定的控制器/操作/参数【英文标题】:Redirecting an asp.net MVC URL to a specific controller/action/parameter using httpRedirect in web.config 【发布时间】:2016-09-13 17:29:32 【问题描述】:

我有一个托管在 Azure 中的网站,将使用 URL https://abc.cloudapp.net/controller1/action1/parameter1 访问该网站

我的客户想要以下。

当我们尝试访问网址“https://abc.cloudapp.net”时,它应该会自动将我重定向到上述网站的实际网址。

我希望使用 web.config 来实现这一点。我尝试了几种组合(下面列出了其中的几种)。

组合一:

<system.webServer>
  <rewrite>
    <rules>
        <rule name="Redirect to Full URL" stopProcessing="true">
            <match url=".*" />
            <conditions>
                <add input="URL" pattern="^abc.cloudapp.net$" />
            </conditions>
            <action type="Redirect" url="https://abc.cloudapp.net/controller1/action1/parameter1" redirectType="Permanent" />
        </rule>              
    </rules>
  </rewrite>
</system.webServer>

组合2:

<system.webServer>
  <rewrite>
    <rules>
        <rule name="Redirect to Full URL" stopProcessing="true">
            <match url="https://abc.cloudapp.net" />
            <action type="Redirect" url="https://abc.cloudapp.net/controller1/action1/parameter1" redirectType="Permanent" />
        </rule>              
    </rules>
  </rewrite>
</system.webServer>

这些组合都不起作用。 我在下面发布了针对此问题的解决方法。 但是,我需要一些快速帮助才能获得永久解决方案。 我仍然需要这方面的帮助,请有人帮忙。

【问题讨论】:

redirectType="Permanent" 将发出 301 Permanent 请求。这些是可缓存的。在浏览器中。对资源的任何后续请求都将从缓存重定向,甚至不会向原始服务器发出请求。这使得调试非常混乱。坚持使用302 Found,直到你让它工作:redirectType="Found" 并弄清楚如何使用flush those nasty 301 responses out of your browser's cache。 【参考方案1】:

我找到了解决方法。

当我们使用 url "https://abc.cloudapp.net" 时,使用默认路由配置我们可以将其设置为在控制器 1 中转到 action1。

那么在“controller1”的“action1”中,如果我们看到“parameter1”为空(必须声明为可空类型),我们需要将parameter1初始化为一个已知值并重定向到相同的“action1”在“控制器1”中

public ActionResult Index(int? parameter1)

  if(string.IsNullOrEmpty(parameter1)
    return RedirectToAction("action1", "controller1", new @parameter1 = "knownValue");
  else
  
    //whatever action you wanted to do based on value in parameter1
  

然而,这整个方法需要硬编码,我们正在为参数 1 分配一个已知值。如果这个值有变化,我们需要修改代码 因此我不推荐这个。但是现在我已经使用了这个解决方法。我仍然需要一个适当的解决方案来解决这个问题。

我的研发还在继续……………………

【讨论】:

以上是关于使用 web.config 中的 httpRedirect 将 asp.net MVC URL 重定向到特定的控制器/操作/参数的主要内容,如果未能解决你的问题,请参考以下文章

使用 Web.config 中的选项填充 HTML 选择

使用链接文件的 App 或 Web Config 中的 AppSettings

git 中的 web.config 和 app.config 机器特定设置

web.config中的configSource

web.config 文件中的特殊字符

MVC 忽略 web.config 中的文化设置