Asp.net mvc 3 设置ObjectContent Web API预览5的最大大小

Asp.net mvc 3 设置ObjectContent Web API预览5的最大大小,asp.net-mvc-3,wcf-web-api,Asp.net Mvc 3,Wcf Web Api,当我使用ObjectContent对象创建HttpContent以通过HttpClient向Web API服务发送请求时,我收到以下错误: 无法向缓冲区写入超过配置的最大缓冲区大小65536的字节 以下代码用于发送请求。卡片对象大约有15个属性 var client = new HttpClient(); var content = new ObjectContent<IEnumerable<Card>>(cards, "application/xml"); Messag

当我使用ObjectContent对象创建HttpContent以通过HttpClient向Web API服务发送请求时,我收到以下错误:

无法向缓冲区写入超过配置的最大缓冲区大小65536的字节

以下代码用于发送请求。卡片对象大约有15个属性

var client = new HttpClient();
var content = new ObjectContent<IEnumerable<Card>>(cards, "application/xml");
MessageBox.Show(content.ReadAsString());  //This line gives me the same error.

var response = client.Post("http://localhost:9767/api/cards", content);
var-client=new-HttpClient();
var content=新的ObjectContent(卡片,“应用程序/xml”);
Show(content.ReadAsString())//这一行给了我同样的错误。
var response=client.Post(“http://localhost:9767/api/cards“,内容);
如何将配置的大小更改为大于65536的大小

关于这一点,有很多不同的看法。尝试使用HttpCompletionOption.ResponseContentRead:

var message = new HttpRequestMessage(HttpMethod.Post, "http://localhost:9767/api/cards");
message.Content = content; 
var client = new HttpClient();
client.Send(message, HttpCompletionOption.ResponseContentRead);

请为客户端尝试以下操作:

HttpClient client = new HttpClient("http://localhost:52046/");

// enable support for content up to 10 MB size
HttpClientChannel channel = new HttpClientChannel() {
    MaxRequestContentBufferSize = 1024 * 1024 * 10 
};

client.Channel = channel;
在服务器上(代码段基于预览4,但您应该得到线索):


由于问题存在于ReadAsString扩展方法中,我建议您创建自己的扩展方法来解决最大缓冲区大小问题

下面是一个ReadAsLargeString扩展方法的示例,它可能解决了这个问题

public static string ReadAsLargeString(this HttpContent content)
{
    var bufferedContent = new MemoryStream();
    content.CopyTo(bufferedContent);

    if (bufferedContent.Length == 0)
    {
        return string.Empty;
    }

    Encoding encoding = DefaultStringEncoding;
    if ((content.Headers.ContentType != null) && (content.Headers.ContentType.CharSet != null))
    {
        encoding = Encoding.GetEncoding(content.Headers.ContentType.CharSet);
    }

    return encoding.GetString(bufferedContent.GetBuffer(), 0, (int)bufferedContent.Length);
}

如果我添加MessageBox.Show(content.ReadAsString());紧接着var内容=。。。它给了我同样的错误。我更新了答案。您可能需要查看源代码以了解它为什么这样做。我不太确定这有什么帮助。我如何“告诉”HttpClient使用此方法?当您实现扩展方法时,请尝试content.ReadAsLargeString()HttpClient的post方法接受HttpContent引用指针,而不是字符串。我为没有充分阅读此问题而道歉。你试过了吗?HttpClient客户端=新HttpClient(新HttpClientHandler{MaxRequestContentBufferSize=int.MaxValue});client.MaxResponseContentBufferSize=int.MaxValue;
public static string ReadAsLargeString(this HttpContent content)
{
    var bufferedContent = new MemoryStream();
    content.CopyTo(bufferedContent);

    if (bufferedContent.Length == 0)
    {
        return string.Empty;
    }

    Encoding encoding = DefaultStringEncoding;
    if ((content.Headers.ContentType != null) && (content.Headers.ContentType.CharSet != null))
    {
        encoding = Encoding.GetEncoding(content.Headers.ContentType.CharSet);
    }

    return encoding.GetString(bufferedContent.GetBuffer(), 0, (int)bufferedContent.Length);
}