【发布时间】:2016-12-08 09:23:19
【问题描述】:
我在 IIS8 下部署了两个 ASP.NET MVC Web 应用程序(让我称它们为发送方和接收方 Web 应用程序)。我正在从发送方内部的操作方法调用接收方 Web 应用程序内部的操作方法。
现在在发送方内部,我有以下操作方法,可以将string 上传到接收方的外部操作方法:
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 对 string 进行编码,因为我将传递诸如 £ 、 ¬ 等 unicode 字符...
在receiver web应用上,接收action方法如下:
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() 会使用默认编码吗?
【问题讨论】:
-
通常不需要对数据进行编码。看起来您向 CreateResource 操作方法发布了一个字符串,但它需要一个模型。什么是资源?
-
@Win 但如果我不使用 UTF8 进行编码,那么我将无法传递非 ASCII 字符,例如 £ 或 ¬,这就是为什么我选择对数据进行编码以便能够传递非 ASCII 字符...否则,如果我从发件人传递诸如 £ 之类的字符,它将被接收为?在接收器操作方法中......对于资源,它是我在发送者和接收者Web应用程序上创建的模型类..除此之外,我正在从发送者发送一个代表资源模型类的json字符串(json字符串正在发送的是模型类的序列化表示)...
标签: asp.net .net asp.net-mvc asp.net-mvc-4 webclient