加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – HttpUtility.UrlEncode和Application_Start

发布时间:2020-12-16 07:03:36 所属栏目:asp.Net 来源:网络整理
导读:根据 http://ayende.com/blog/4599/hunt-the-bug,我遇到了其中一种情况,即“在这种情况下无法提供响应”. 非常简化,以下内容在Windows Server 2008 / IIS7 / ASP.NET 4.0的某些情况下引发异常 public class Global : HttpApplication{ public void Applicati
根据 http://ayende.com/blog/4599/hunt-the-bug,我遇到了其中一种情况,即“在这种情况下无法提供响应”.

非常简化,以下内容在Windows Server 2008 / IIS7 / ASP.NET 4.0的某些情况下引发异常

public class Global : HttpApplication
{
       public void Application_Start(object sender,EventArgs e)
       {
            HttpUtility.UrlEncode("Error inside!");
       }
}

我见过的解决方案涉及以下其中一项:

>按照Ayende所做的那样,并“编写我自己的HttpUtility(好吧,从Mono拿一个并修改它)以避免这个错误.”
>或者确定是否使用HttpEncoder.Default来完成这个技巧.我试图找出最好的方法.
>或根据Server.UrlEncode vs. HttpUtility.UrlEncode使用Uri.EscapeDataString

也许这不是我最好的谷歌搜索日,但如何实现HttpEncoder.Default?

建议?

解决方法

你可以尝试这个编码

public static string UrlEncode(string s)
{
    return typeof(System.Net.WebClient).InvokeMember("UrlEncode",BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.InvokeMethod,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",new object[] { s,Encoding.UTF8 }) as string;
}

如果您感觉不舒服,或者您的应用程序未以完全信任级别运行,请尝试此操作

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,bytes.Length);

        return System.Text.Encoding.UTF8.GetString(encodedBytes);
    }

    public static string UrlEncode(string s)
    {
        return Encoder.InternalUrlEncode(s);
    }
}

我知道它不是最好的方法,但如果我们不使用HttpUtility.UrlEncode,最好的方法是什么!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读