2016-05-04 8 views
5

Web API(C#)のメソッドをリポジトリから呼び出しています。メソッドはリポジトリが何も返さないことです。それは空です。非同期メソッドはVoid戻り型を持つことができないので、APIメソッドで返すべきです。Web APIの非同期メソッドでの返り値の無効化

これは、APIの私の非同期メソッドです:

[HttpPost] 
    [Route("AddApp")] 
    public async Task<?> AddApp([FromBody]Application app) 
    {   
     loansRepository.InsertApplication(app); 
    } 

、これはリポジトリ内EntityFrame作業インサート(私は途中で変更にこれをCOTすることができます)

 public void InsertApplication(Application app) 
    { 

     this.loansContext.Application.Add(app); 
    } 

は申し訳ありませんが、私はに変更を加えています質問、私は何を持っているべきかわからないのですか?タスク内

+0

あなた 'タスクは'何を返す必要がありますか? –

+0

@ PhilippeParé申し訳ありませんがコードを変更しましたが、私は無効な返品の種類はありません。 – Alma

+2

代わりに単純に 'Task'を返してください:) –

答えて

10

:にコードを変更してください。

[HttpPost] 
[Route("AddApp")] 
public async Task AddApp([FromBody]Application app) 
{ 
    // When you mark a method with "async" keyword then: 
    // - you should use the "await" keyword as well; otherwise, compiler warning occurs 
    // - the real return type will be: 
    // -- "void" in case of "Task" 
    // -- "T" in case of "Task<T>" 
    await loansRepository.InsertApplication(app); 
} 

public Task InsertApplication(Application app) 
{ 
    this.loansContext.Application.Add(app); 

    // Without "async" keyword you should return a Task instance. 
    // You can use this below if no Task is created inside this method. 
    return Task.FromResult(0); 
} 
-4

コンパイラは "Return statement missing"と警告します。あなたが何かを返すようにしたくない場合は、戻り値の型はTaskあるべき

[HttpPost] 
[Route("AddApp")] 
public void AddApp([FromBody]Application app) 
{ 
    //add configureAwait(false) as it would give better performance. 

    loansRepository.InsertApplication(app)  
} 
+0

これは彼の質問に対する答えではなく、コメントです。これについては、回答セクションを使用しないでください。 –

+1

そしてConfigureAwaitに関するあなたの発言は完全にオフです。実際に何が行われているのか、なぜそれを使用するのかについて少しお読みください。 –

+0

'async/await'を使用すると、何の理由もなく不必要なオーバーヘッドが追加されます。 'Task.Run'の結果に直接戻ることを検討してください。 – Aron

5

あなたはEntity Frameworkのリポジトリを変更「することはできません」ので、あなたのアクションメソッドを非同期に行うべきではありませんし、あなただけのvoidを返す必要があります:

[HttpPost] 
[Route("AddApp")] 
public void AddApp([FromBody]Application app) 
{   
    loansRepository.InsertApplication(app); 
} 
+2

スティーブンはすべてのことを非同期的に扱う権限です。私は彼の答えにつきます。 –

+0

C#クライアントからこのメソッドを呼び出す方法はありますか? –

+0

@FaithWins:リクエスト本体としてシリアル化された 'Application'を使って'/AddApp'に投稿します。さらに詳しい情報が必要な場合は、あなた自身の質問をすることをお勧めします。 –

関連する問題