ASP.NET中Request.QueryString中文亂碼的解決方法

最近需要修改項目中的登錄功能,之前別人寫好的方法是利用URL進行參數傳遞,然後用Request.QueryString方法獲取參數。其實我並不喜歡利用URL進行傳參,個人還是比較傾向於使用ajax + post的方式進行參數傳遞。之後寫着寫着就發現問題了,如果傳遞的參數值是中文,Request.QueryString方法獲取到的參數竟然會亂碼!而且同一段代碼,不同瀏覽器之間的效果還不一樣!最終在求助度娘後終於解決了問題,下面就分享一下解決方法。首先看一段代碼:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta charset="utf-8" />
    <title>登錄</title>
    <script src="Scripts/jquery-1.11.3.min.js"></script>
</head>
<body>
    <script>
        $(document).ready(function () {
            $.ajax({
                url: 'TestHandler.ashx?username=張三',
                type: 'get',
                dataType: 'json',
                success: function (data) {
                    alert(data);
                }
            })
        })
    </script>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Newtonsoft.Json;

namespace WebApplication1
{
    /// <summary>
    /// TestHandler 的摘要說明
    /// </summary>
    public class TestHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string userName = context.Request.QueryString["username"].ToString();
            context.Response.Write(JsonConvert.SerializeObject(userName));
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

代碼十分簡單,前端傳遞一個username參數,參數值爲“張三”,後臺接收參數後不做任何處理返回給前端。下面我們用Chrome、Firefox、Edge和IE四種瀏覽器分別測試一下。
Chrome效果:
在這裏插入圖片描述
Firefox效果:
在這裏插入圖片描述
Edge效果:
在這裏插入圖片描述
IE效果:
在這裏插入圖片描述
可以發現,Chrome、Firefox、Edge都能正確運行,IE則出現亂碼。要解決IE瀏覽器下的亂碼問題,只需要在Web.config的<system.web></system.web>節點下加一句話就行了:

<system.web>
    <globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" />
</system.web>

現在再來測試一下I,可以發現IE正確讀取參數值:
在這裏插入圖片描述
需要注意的是,如果使用該方法,IE確實可以正確讀取參數,但Chrome、Firefox、Edge則會出現亂碼,不過由於我們的項目必須使用IE,所以也就無所謂了~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章