gpt4 book ai didi

c# - 更改 WebResource.axd 的请求 url

转载 作者:太空狗 更新时间:2023-10-29 18:28:05 26 4
gpt4 key购买 nike

我的 Web 应用程序 (http://www.something.com/social/competition/) 当前正在请求 WebResource.axd 文件,如下所示:

<script src="/WebResource.axd?d=xxx" type="text/javascript"></script>

由于我们在 Netscaler 中使用 urlrewiting 将对“/social”文件夹的所有请求转发到包含此应用程序的单独服务器场,“/”根路径将无法正确解析,因为它将请求资源来自 something.com 应用。

因此我需要更改请求脚本的 url 以明确请求它:

<script src="/social/WebResource.axd?d=xxx" type="text/javascript"></script>

或者使用相对路径请求它:

<script src="WebResource.axd?d=xxx" type="text/javascript"></script>

到目前为止,我已经了解了重写渲染方法、使用控制适配器和其他各种东西,但还没有真正取得进展。请帮忙。

最佳答案

是的,经过大量研究后发现,覆盖这些文件的渲染过程几乎是不可能的。所以唯一的选择就是肮脏、肮脏、可怕的黑客攻击!

protected void Page_Load(object sender, EventArgs e)
{
//Initialises my dirty hack to remove the leading slash from all web reference files.
Response.Filter = new WebResourceResponseFilter(Response.Filter);
}

public class WebResourceResponseFilter : Stream
{
private Stream baseStream;

public WebResourceResponseFilter(Stream responseStream)
{
if (responseStream == null)
throw new ArgumentNullException("ResponseStream");
baseStream = responseStream;
}

public override bool CanRead
{
get { return baseStream.CanRead; }
}

public override bool CanSeek
{
get { return baseStream.CanSeek; }
}

public override bool CanWrite
{
get { return baseStream.CanWrite; }
}

public override void Flush()
{
baseStream.Flush();
}

public override long Length
{
get { return baseStream.Length; }
}

public override long Position
{
get
{
return baseStream.Position;
}
set
{
baseStream.Position = value;
}
}

public override int Read(byte[] buffer, int offset, int count)
{
return baseStream.Read(buffer, offset, count);
}

public override long Seek(long offset, System.IO.SeekOrigin origin)
{
return baseStream.Seek(offset, origin);
}

public override void SetLength(long value)
{
baseStream.SetLength(value);
}

public override void Write(byte[] buffer, int offset, int count)
{
//Get text from response stream.
string originalText = System.Text.Encoding.UTF8.GetString(buffer, offset, count);

//Alter the text.
originalText = originalText.Replace("/WebResource.axd", "WebResource.axd");
//Write the altered text to the response stream.
buffer = System.Text.Encoding.UTF8.GetBytes(originalText);
this.baseStream.Write(buffer, 0, buffer.Length);

}

这会拦截到页面的流并将所有出现的“/WebResource.axd”替换为“WebResource.axd”。因为它是一个相对路径,所以解析得很漂亮!

我想到了另一个解决方案,它需要将 Web 应用程序安装到模仿“/social”关键字重定向的虚拟目录。这会导致 asp.net 更新 HttpRuntime.AppDomainAppVirtualPath 以在页面引用中包含“/social”,从而正确解析。

大呼呼!

关于c# - 更改 WebResource.axd 的请求 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5536536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com