【问题标题】:How to rewrite to an url如何重写一个url
【发布时间】:2017-03-07 17:10:29
【问题描述】:

在 IIS url 重写中,它能够重写到另一个 url,执行以下操作:

 <rule name="Blog" stopProcessing="true"> 
<match url="(?:^blog|weblog)(?:/)?(.*)" /> 
<action type="Rewrite" url="http://blog.domain.com/{R:1}" appendQueryString="true" logRewrittenUrl="true" /> 
</rule>

所以调用 url domain.com/blog 时的 url 被重写为 blog.domain.com (但浏览器中的 url 保持不变)。

如何在 C# 代码中完成相同的任务?

我有 HttpContext,但我只能重定向。有一个 RewritePath 方法,但将 url 作为参数提供会导致“不是有效的虚拟路径”异常。

【问题讨论】:

  • 似乎只是某种正则表达式替换?

标签: c# url-rewriting


【解决方案1】:

我不确定它是否称为重写,但是这种行为就像重写一个 url。很简单,只需要创建一个webrequest,获取webrequest的response,并将结果以html的形式返回给网页。

如果您使用的是 ASP.Net MVC,这可能会有所帮助,

public virtual ActionResult RealUrl()
        {
          var request = WebRequest.Create("http://rewriteUrl.com/blahblah");
        // If required by the server, set the credentials.
        request.Credentials = CredentialCache.DefaultCredentials;
        // Get the response.
        var response = (HttpWebResponse)request.GetResponse();
        // Display the status.
        // Get the stream containing content returned by the server.
        var dataStream = response.GetResponseStream();
        // Open the stream using a StreamReader for easy access.
        if (dataStream == null) return null;
        var reader = new StreamReader(dataStream);
        // Read the content.
        var responseFromServer = reader.ReadToEnd();

        reader.Close();
        dataStream.Close();
        response.Close();
        return Content(responseFromServer); 
}

【讨论】:

    【解决方案2】:

    【讨论】:

    • 确实,这就是它当前使用 IIS 重写配置的方式。但是我只想在代码中做同样的事情,那我需要怎么调用它呢?
    • 以上答案是我将如何做到的......它并不完美,因为您基本上是复制代理功能。 (stackoverflow.com/a/42644178/1381426)
    猜你喜欢
    • 2023-03-23
    • 2013-03-13
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2022-11-28
    • 1970-01-01
    相关资源
    最近更新 更多