[英]HttpUtility.UrlEncode and Application_Start
As per http://ayende.com/blog/4599/hunt-the-bug , I've run into one of those scenarios whereby "Response is not available in this context".根据http://ayende.com/blog/4599/hunt-the-bug ,我遇到了“响应在此上下文中不可用”的场景之一。
Greatly simplified, the following throws an exception in certain scenarios on Windows Server 2008/IIS7/ASP.NET 4.0大大简化了,下面在Windows Server 2008/IIS7/ASP.NET 4.0上的某些场景下会抛出异常
public class Global : HttpApplication
{
public void Application_Start(object sender, EventArgs e)
{
HttpUtility.UrlEncode("Error inside!");
}
}
The solutions that I've seen involve one of the following:我见过的解决方案涉及以下之一:
Maybe it's not my best googling day, but how to implement HttpEncoder.Default?也许这不是我最好的谷歌搜索日,但是如何实现 HttpEncoder.Default?
Recommendations?建议?
You can try this for encoding你可以试试这个进行编码
public static string UrlEncode(string s)
{
return typeof(System.Net.WebClient).InvokeMember("UrlEncode", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.InvokeMethod, null, null, new[] { "[#encoded] <data>" }) as string;
}
// by @DmitryDzygin
public static string UrlDecode(string s)
{
return typeof(System.Net.WebClient).Assembly.GetType("System.Net.HttpListenerRequest+Helpers").InvokeMember("UrlDecodeStringFromStringInternal", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.InvokeMethod, null, null, new object[] { s, Encoding.UTF8 }) as string;
}
And if you don't feel comfortable with or your application is not running in FULL trust level, try this如果您不满意或者您的应用程序没有以完全信任级别运行,请试试这个
public class HttpUtils : System.Web.Util.HttpEncoder
{
private static HttpUtils _encoder;
internal static HttpUtils Encoder
{
get { return _encoder ?? (_encoder = new HttpUtils()); }
}
internal string InternalUrlEncode(string s)
{
var bytes = System.Text.Encoding.UTF8.GetBytes(s);
var encodedBytes = base.UrlEncode(bytes, 0, bytes.Length);
return System.Text.Encoding.UTF8.GetString(encodedBytes);
}
public static string UrlEncode(string s)
{
return Encoder.InternalUrlEncode(s);
}
}
I Know it is not still the best way but what could the best way be if we don't use HttpUtility.UrlEncode...我知道这仍然不是最好的方法,但如果我们不使用 HttpUtility.UrlEncode 最好的方法是什么......
Requires FULL trust需要完全信任
public static class DefaultHttpEncoder
{
public static string UrlEncode(string urlPart)
{
using (new NoHttpContext())
{
return HttpUtility.UrlEncode(urlPart);
}
}
public static string UrlDecode(string urlPart)
{
using (new NoHttpContext())
{
return HttpUtility.UrlDecode(urlPart);
}
}
private class NoHttpContext : IDisposable
{
private readonly HttpContext _context;
public NoHttpContext()
{
_context = HttpContext.Current;
HttpContext.Current = null;
}
public void Dispose()
{
HttpContext.Current = _context;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.