2017-03-07 133 views
0

在IIS URL重写它能够做重写到另一个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被称为呼叫的网址是rewriten到blog.domain.com(但浏览器中的网址保持不变)。

如何在C#代码中完成相同的操作?

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

+0

似乎只是有点正则表达式替换? –

回答

0
+0

的确,这就是它目前与IIS重写配置一起工作的方式。但是我只想在代码中做同样的事情,那么我该如何调用它呢? – BvdVen

+0

上面的答案是我如何做到这一点......它不完美,因为你基本上复制代理功能。 (http://stackoverflow.com/a/42644178/1381426) – Webbanditten

1

我不知道它是否叫然而重写的行为就像是在重写URL。简单来说,只需创建一个webrequest,获取webrequest的响应并将结果作为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); 
}