如何/在哪里asp.net mvc处理解码和动作方法参数
我在IIS8下部署了两个ASP.NET MVC Web应用程序(让我称之为发送方和接收方Web应用程序).我从发送方内部的操作方法调用接收方Web应用程序中的操作方法.
现在在发件人中,我有以下操作方法,将字符串上传到接收器上的外部操作方法: using (WebClient wc = new WebClient()) { var data = JsonConvert.SerializeObject(resource); string url = "https://receiver/CreateResource?AUTHTOKEN=" + pmtoken; Uri uri = new Uri(url); wc.Encoding = System.Text.Encoding.UTF8; wc.Headers.Add(HttpRequestHeader.ContentType,"application/json; charset=utf-8"); wc.Headers.Add("Authorization",token); output = wc.UploadString(uri,data) } 我在上传之前使用UTF-8编码字符串,因为我将传递unicode字符,如£,?等… 在接收方Web应用程序上,接收操作方法如下: public List<CRUDOutput> CreateResource(Resource resourceinfo) 一开始我认为我的方法不会很好.因为我正在从发送器向接收器动作方法发送编码数据(使用wc.Encoding = System.Text.Encoding.UTF8;),并且我没有对接收器动作方法进行任何类型的解码. 但是,似乎在接收动作方法上,resourceinfo接收到正确的解码值.所以看起来ASP.NET MVC会在某处自动处理解码. 第一个问题: 谁能告诉我ASP.NET MVC如何处理接收操作方法中的解码? 第二个问题: 在我的WebClient()方法中,我定义以下内容以指定内容类型标头: wc.Headers.Add(HttpRequestHeader.ContentType,"application/json; charset=utf-8"); 然而,似乎这对我的情况没有任何影响.当我删除上面的代码行时,没有任何变化.任何人都可以告诉我,如果定义内容类型标题会对我的情况有任何影响吗? 最后一个问题: 如果我没有使用wc.Encoding = System.Text.Encoding.UTF8明确定义UTF-8编码; WebClient()会使用默认编码吗? 解决方法
第一:Http请求的解码在哪里/什么?
在ASP.NET中,获取HTTP请求并将其转换为C#POCO的过程称为Model Binding. web api pipeline poster非常好地描述了何时发生这种情况,以及它是什么. 这是一个摘录,显示我认为你正在寻找的区域: 如果存在与HTTP请求中的MIME标头匹配的媒体类型格式化程序(上面以红色突出显示),则该媒体类型格式化程序将读取该消息.如model binding resources所述,媒体类型格式化程序可以通过Application Start的HttpConfiguration.Formatters属性进行配置,通常在Startup.cs或Global.Asax.cs中进行配置.我敢打赌,如果你调试,并检查Config.Formatters,你会发现一个配置为UTF-8的JsonFormatter. The tutorial在“将媒体格式化程序添加到Web API管道”一节中有一个代码片段,用于设置自定义格式化程序. public static void ConfigureApis(HttpConfiguration config) { config.Formatters.Add(new ProductCsvFormatter()); } 第二:为什么不指定charset似乎有效? 您是否发送了任何可能产生影响的更高级别的字符,或尝试为标题设置除UTF8之外的其他字符集? W3Schools有一个很好的表“Differences Between Charsets”尝试使用它来测试你的字符集标题和结果解码值的差异. 我认为这个问题的真正答案是你的第三个问题的答案…… 第三:什么是默认字符集? 我很确定,但是没有任何可靠的资源,UTF-8现在是编码/解码字符串的事实上的标准.我不记得上次我见过除UTF-8以外的任何东西,除了我最后一次用C编程. 但是,在.NET中,您可以使用WebClient.Encoding property检查WebClient的编码.它说:用于编码字符串的编码.此属性的默认值是Default返回的编码. ‘默认’的位置是:Encoding.Default.如果您调试程序并发现它是UTF-8,我绝对不会感到惊讶. 一个好主意是使用此设置,并使用Fiddler检查生成的标题. 附:我觉得有义务提到Joel的great post on this topic. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET MVC3:部分视图和主视图之间的交互
- asp.net-mvc – Orchard CMS中的SignalR聊天模块
- asp.net – 错误:数据绑定方法(如Eval(),XPath()和Bind()只
- rest – 在ASP.NET Core中实现“JSON Merge Patch” – 最好
- asp.net – IControllerFactory’MyWebSite.WebUI.Infrastr
- asp.net core 使用中间件拦截请求和返回数据,并对数据进行
- asp.net – Vs html
- asp.net – default.aspx中的“StartTag:invalid element
- asp.net成员资格 – 在Application_AuthenticationRequest设
- asp.net-mvc – MVC:覆盖默认的ValidationMessage
- asp.net – 返回新的RedirectResult()vs返回Redi
- asp.net-mvc-3 – Asp.net mvc 3-获取当前控制器
- asp.net – 在新的VS 2013 Identity UserManager
- asp.net – c#如何获取httpResponse.BinaryWrite
- 动态类型dynamic转换为特定类型T的方案
- asp.net-mvc – 如何设置html.EditorFor helper的
- ASP.NET Core:部署项目到Ubuntu Server
- asp.net-mvc – ASP.NET MVC的生产力?
- asp-classic – 如何在经典ASP中将数据POST到远程
- asp.net-mvc – 资源解释为Document但使用MIME类