2017-06-21 12 views
1

これはMVCコントローラのコードです。MVCコントローラからWeb APIコントローラにオブジェクトを渡したい

[HttpPost] 
public async Task<IActionResult> InsertNewStudentAsync(ViewModel.StudentPersonalDetailsViewModel ob) 
{ 
    StudentModel obj = ViewModel.StudentPersonalDetailsViewModel.Translate(ob); 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri("http://localhost:52494/"); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     var bodyData = ViewModel.StudentPersonalDetailsViewModel.Translate(ob); 

     //HttpContent ob = new HttpContent(); 
     var response = await client.PostAsync("api/Student/InsertStudent",obj); 
    } 
    return View(); 
} 
ラインで

var response = await client.PostAsync("api/Student/InsertStudent",obj);

それは私にその

エラーCS1503引数2示すOBJ上のエラー表示される: 'SMS.Domain.Models.StudentModel' から 'に変換することはできませんがSystem.Net.Http.HttpContent '

どうすればそのオブジェクトをAPIのコントローラに渡すのですか。

答えて

2

これは、派生クラスHttpContentを期待しているからです。

PostAsJsonAsync拡張メソッドを使用し

var response = await client.PostAsJsonAsync("api/Student/InsertStudent",obj); 

またはそれを変換のいずれかを自分で

var json = JsonConvert.SerializeObject(obj); 
var content = new StringContent(json, Encoding.UTF8, "application/json"); 
var response = await client.PostAsync("api/Student/InsertStudent", content); 

拡張メソッドは、ボンネットの下にやっている基本的にはどれ。

追加の依存関係を追加したくない場合は、独自の拡張メソッドをローリングする例を示します。

public static Task<HttpResponseMessage> PostAsJsonAsync<T>(this HttpClient client, string requestUri, T obj) { 
    var json = JsonConvert.SerializeObject(obj); 
    var content = new StringContent(json, Encoding.UTF8, "application/json"); 
    return client.PostAsync(requestUri, content);  
} 
関連する問題