使用ISA公开内部MVC网站

时间:2013-02-18 15:17:38

标签: asp.net-mvc-3 iis-7 isa

我们有内部服务器运行MVC3应用程序,该应用程序已通过我们的外部服务器使用ISA服务器提供。

然而;它没有应用CSS,因为对外部站点的引用未正确映射。

我可以看到2之间的主要区别是内部它作为内部服务器上的应用程序运行(http://InternalServer/MVCSite

外部服务器被视为在子网站(http://ExternalDomain/SubSite/MVCSite)中作为应用程序运行,这就是全世界所获得的。

查看生成的网址,我可以看到其行为类似于内部网站,并将@Url.Content("~/Content/Site.css")作为/MVCSite/Content/Site.css返回。

我一直在看这篇文章,看看它是否有任何亮点:http://support.microsoft.com/kb/885186

我认为重定向可能无法处理网站结构的差异?因此,修改内部网站以反映外部布局将修复任何用途。内部InternalServer/MVCSite变为ExternalDomain/SubSite/MVCSite

当我发现事情时,我会添加更多。

1 个答案:

答案 0 :(得分:0)

这个答案与isa无关,并且可能有一种正确的方法来配置它。但是,如果找不到合适的解决方案,HttpRuntime.AppDomainAppVirtualPath可能会对您有所帮助。

您可以尝试@Url.Content("~/Content/Site.css")

,而不是使用:@Url.Content(HttpRuntime.AppDomainAppVirtualPath + "Content/Site.css")

如果这不起作用,您可以使用反射覆盖AppDomainAppVirtualPath的值。看看这里:http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/Q_24475811.html#a24591595

Dim vpathTypeName As String = "System.Web.VirtualPath, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
Dim virtualPath As Object = ReflectionHelper.Instantiate(vpathTypeName, New Type() {GetType(String)}, New Object() {"/"})
ReflectionHelper.SetPrivateInstanceFieldValue("_appDomainAppVPath", runtime, virtualPath)

它基本上用您需要的任何值更新静态字段。您可以使用以下代码验证主机标头:HttpContext.Current.Request.Url.Host并将值设置为//SubSite/