WebApi中过滤参数进行解码

项目经测试,发现从IE提交的数据,汉字会变成乱码,实验了网上很多网友说的给ajax加上contentType:"application/x-www-form-urlencoded; charset=UTF-8",发现没有用(ajax的请求标头确实变了,但是还是会乱码)

于是开始试验进行URL编码解码,一开始我是很不想这么干,因为这意味着我的后台也要对应的解码,现在没办法了,于是考虑用一个过滤器将客户端传过来的参数全部解码后再执行方法,没什么好说的,实现如下:

public class UrlDecodeFilter : ActionFilterAttribute
    {
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            base.OnActionExecuted(actionExecutedContext);
        }
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            Dictionary<string, object> Param = actionContext.ActionArguments;
            Dictionary<string, string> ParamTemp = new Dictionary<string, string>();
            foreach (string item in Param.Keys)
            {
                object Value = Param[item];
                if (Value == null)
                    continue;
                string StrValue = Value.ToString();
                if (string.IsNullOrEmpty(StrValue))
                    continue;
                ParamTemp.Add(item, HttpUtility.UrlDecode(StrValue).Replace("??", ""));
            }
            foreach (var item in ParamTemp.Keys)
            {
                actionContext.ActionArguments[item] = ParamTemp[item];
            }
            base.OnActionExecuting(actionContext);
        }
    }

MVC里面和这个类似,只是使用的属性不一样。

对于为什么解码会出现“??”两个问号,我不知道,如果有知道的朋友希望不吝赐教

时间: 2024-11-07 18:35:52

WebApi中过滤参数进行解码的相关文章

WebAPI中路由参数中包含字符-点‘.’, 比如:http://localhost:30695/api/studies/1.1.1.1.1

?? DICOM RESTFul服务中好多请求url都是类似:{SERVICE}/studies/{StudyInstanceUID}, UID如1.2.156.112605.75006881735343.1369658683.4.4.1. 我们默认建立的Asp Net WebApi 服务时,如果请求url包含'.',则返回404错误. 解决办法: 需要在web.config文件中添加如下节点. <configuration>   <system.webServer>    <

关于mvc、webapi中get、post、put、delete的参数

webapi中post提交的数据必须是一个类,get提交的数量无所谓 多种参数get时,参数名不能相同: 在能通过c#的校验的前提下,参数名.参数数量不能全完相同 public string Get(int page, int pagesize) { return "test1"; } public string Get(int page) { return "test2"; } 这是没问题的 public string Get(int page, int page

在webapi中为Action使用dynamic参数实现Post方式调用

原文:在webapi中为Action使用dynamic参数实现Post方式调用 1.在webapi中使用controller/action/id的路径配置,打开文件[App_Start] -[WebApiConfig] config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RoutePa

webapi中使用token验证(JWT验证)

本文介绍如何在webapi中使用JWT验证 准备 安装JWT安装包 System.IdentityModel.Tokens.Jwt 你的前端api登录请求的方法,参考 axios.get("api/token?username=cuong&password=1").then(function (res) { // 返回一个token /* token示例如下 "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZ

【WinRT】获取 Uri 中的参数(QueryString)键值对

在控制台或者其它类型的项目中,可以添加 System.Web,使用以下代码来获取一个 Uri 中的参数 Uri uri = new Uri("http://www.cnblogs.com/h82258652/?gender=male&age=17"); NameValueCollection collection = HttpUtility.ParseQueryString(uri.Query); for (int index = 0; index < collectio

大龙的胡思乱想之“filestream中offset参数”

改偏移量之前 using (FileStream fs = new FileStream(txtFilePathRead.Text, FileMode.Open)) { //创建一个容量4M的数组 byte[] byteData = new byte[1024 * 1024 * 4]; //从文件中读取数据写入到数组中(数组对象,从第几个开始读,读多少个) //返回读取的文件内容真实字节数 int length = fs.Read(byteData, 0, byteData.Length );

http协议中的编码和解码

http://www.csdn1 2 3.com/html/itweb/20130730/29422_29378_29408.htm ****************************** 一.字符集与文字编码简介 1. 计算机如何显示文字 我们知道,计算机是以二进制的“形式”来保存和处理数据的,也 就是说,不管我们使用键盘进行输入,还是让计算机去读取一个文本文件,计算机得到的原始内容是一些二进制序列,当需要对这些二进制序列进行显示时,计算机 会依照某种“翻译机制”(也就是编码方式),取到

提取URL的搜索字符串中的参数

1 /*--------------------------------------------------------------------------------* 2 * 功能描述:提取URL的搜索字符串中的参数 3 * 原理:这个函数用来解析来自URL的查询串中的的name=value参数对 4 * 它将name=value对存储在一个对象的属性中,并返回该对象 5 * 测试:已通过 6 * 时间:2016/10/31 7 *------------------------------

DeepLearning tutorial(2)机器学习算法在训练过程中保存参数

我是小白,说的不是很好,请原谅 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43169019 参考:pickle - Python object serialization.DeepLearning Getting started 一.python读取"***.pkl.gz"文件 用到Python里的gzip以及cPickle模块,简单的使用代码如下,如果想详细了解可以参考上面给出的链接. [p