2012-10-23 83 views
18

我正在做一个Asp.Net MVC 4项目,并正在寻找一个内部请求(如代理)到我们的api服务。使用FormCollection中的数据制作异步HttpClient发布请求

这是索引方法在我的控制器中的样子。我被困在PostAsync部分。

[HttpPost] 
public async Task<ActionResult> Index(FormCollection body){ 

    HttpClient httpClient = new HttpClient(); 
    httpClient.BaseAddress = new Uri("http://myapi.com"); 

    // posts to http://myapi.com/users 
    var response = await httpClient.PostAsync("users", body); 

    if(response.isSuccessStatusCode) return Json(new { 
     status = true, 
     url = response.Content.Url 
    }); 
} 

我想通过我的 “应用程序/ x-窗体-urlencoded” “体” 的内容到PostAsync POST方法。但是,我收到错误消息“body不是HttpContent类型”。

我无法施放或转换。现在怎么办?

让我知道我在这里做错了什么。

埃里克

+0

'FormCollection'和'HttpContent'是完全不同的类型。你为什么期望你的代码能够工作(有或没有演员)?你需要做的是根据你的“FormCollection”中的数据创建一个新的'HttpContent'。 – svick

+0

对,我试图说明我需要做什么以上。我正在寻找更多的步骤,而不是一个简单的答案。 @svick,你有没有创建一个基于FormCollection数据集的新HttpContent的例子? – Erik5388

回答

33

我不是很确定你想要做什么,但可能转换FormCollection到词典,并使用FormUrlEncodedContent类是你在找什么。

例如为:

var response = await httpClient.PostAsync("users", 
              new FormUrlEncodedContent(
               body. 
                AllKeys.ToDictionary(
                 k => k, v => body[v]))); 
+1

所有这一次,我试图使用MultipartFormDataContent来做到这一点,并失败。在我的请求中使用FormUrlEncodedContent就像魅力一样。谢谢! – killthrush

+0

将数据转换为HttpContent不是更好吗?或者HttpContent只是另一个字典? – Erik5388

+1

@ Erik5388我认为HttpContent是*抽象基类*。你不能实例化。相反,你需要一个具体的类..继承..和'FormUrlEncodedContent'我认为是其中之一:) –

相关问题