【问题标题】:How to do Dynamic URL Redirect in ASP.net MVC?如何在 ASP.net MVC 中进行动态 URL 重定向?
【发布时间】:2016-08-24 17:52:28
【问题描述】:

我必须从另一个网站获取 html 响应并加载到我的应用程序中。我写了下面的代码,

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Web;
    using System.Web.Mvc;

    namespace MVC_TEST.Controllers
    {
        public class DocumentCloudController : Controller
        {
            public string Index()
            {
                var result = GetResponse();
                return result;
            }

            private static string GetResponse()
            {

                var html = string.Empty;
                const string url = @"http://localhost/xxxxx/yyyyy/logon.aspx";

                var request = (HttpWebRequest)WebRequest.Create(url);
                request.AutomaticDecompression = DecompressionMethods.GZip;
                using (var response = (HttpWebResponse)request.GetResponse())
                {
                    using (var stream = response.GetResponseStream())
                    {
                        if (stream != null)
                        {
                            using (var reader = new StreamReader(stream))
                            {
                                html = reader.ReadToEnd();
                            }
                        }
                    }
                }


                return html;
            }}


        }
    }

控件加载正确,但图片、css和js路径映射到相对路径

    /xxxx/yyyy/dojo.js , 
    /xxxx/style/logon.css, 
    /xxxx/images/logon.png

在 html 中,我必须将其更改为如下所示的实际 url

 http://localhost/xxxx/yyyy/dojo.js , 
 http://localhost/xxxx/style/logon.js , 
 http://localhost/xxxx/images/logon.png     

一个选项是在 html 中找到这些内容替换它。

还有其他选项可以动态更改网址吗? IIS URL Rewrite 模块是否适合我的要求?

请分享你的想法

【问题讨论】:

    标签: html asp.net .net asp.net-mvc iis-7


    【解决方案1】:

    使用 IIS URL 重写模块可以工作,但我建议使用 HTML 解析器,如 HTML Agility PackAngleSharp 来查询和操作 DOM。

    下面的例子是一个在创建反向代理时为我工作的 sn-p:

    foreach (var link in document.DocumentNode.SelectNodes("//link[@href]"))
    {
        var orgHrefValue = link.GetAttributeValue("href", string.Empty);
        var updHrefValue = string.Concat("[BASE URL]", GetAbsoluteUrlString(requestedUrl, orgHrefValue).AbsoluteUri);
        link.SetAttributeValue("href", updHrefValue);
    }
    
    private static Uri GetAbsoluteUrlString(string baseUrl, string url)
    {
        var uri = new Uri(url, UriKind.RelativeOrAbsolute);
    
        if (!uri.IsAbsoluteUri)
            uri = new Uri(new Uri(baseUrl), uri);
    
        return uri;
    }
    

    【讨论】:

    • 感谢@JesseJhonson。但是我在 js 文件中有一些 ajax webservice 调用,我也需要替换它。不知道以后会打多少服务电话?还有其他解决办法吗?
    • 我使用上述相同的方法来替换链接的 CSS 文件和 JS 脚本中的绝对 URL。您是否考虑过使用反向代理?像Titanium-Web-Proxy 这样的东西可能会简化这个过程。本质上,您解析 HTML 并替换所有 URL 以指向您的反向代理(类似于 mydomain.com/proxy.ashx?uri={original url})。这样,所有外部文件(js、css 等)都将通过您的代理加载,您可以像使用 HTML 一样获取内容、解析、修改和提供服务。
    猜你喜欢
    • 2010-09-26
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    相关资源
    最近更新 更多