2017-08-31 18 views
0

特定の機能を実装したいが、どこから開始するのか分からない。私は何を持っているのか説明します。入力パラメータに応じてコントローラメソッドを呼び出す

バックエンド

public enum SourceType { Database, Folder } 
public class DatabaseSource 
{ 
    public string ServerName { get; set; } 
    public string DatabaseName { get; set; } 
} 
public class FolderSource 
{ 
    public string FolderName { get; set; } 
} 
public class TestController : ApiController 
{ 
    [HttpPost] 
    [Route("source")] 
    public void Post([FromBody]DatabaseSource source) //method one 
    { 
    } 

    [HttpPost] 
    [Route("source")] 
    public void Post([FromBody]FolderSource source) //method two 
    { 
    } 

} 

フロントエンド

export enum SourceType { 
    Database, 
    Folder 
} 
export class DatabaseSource { 
    public ServerName: string; 
    public DatabaseName: string; 
} 
export class FolderSource { 
    public FolderName: string; 
} 

var source = new DatabaseSource(); 
source.ServerName = "serverName"; 
source.DatabaseName = "dbName"; 

var obj = { 
    sourceType: SourceType.Database, 
    source: source 
}; 

は今、私は、サーバーにobjを送信することを想像してみてください。私はその特定のコントローラメソッドが列挙型に応じて呼び出されるようにしたい。これどうやってするの?

P.S.この例は大幅に簡素化されています。

答えて

1

コードで指定した内容と実装が矛盾しています。バックエンドであなたがApiControllerメソッドをオーバーロードしているし、(単一のHTTPメソッドおよびエンドポイントに異なるRESTオブジェクトのリソースをマッピングしながら、フロントエンドで

あなたは、 sourceTypeフィールドと sourceオブジェクトのプロパティを持つオブジェクトを記述しています私は動作しないと信じています)。

ApiControllerは、enumプロパティを使用してオブジェクトタイプを自動的に区別する魔法の方法はありません。

DatabaseFolderソースオブジェクトのPOST呼び出しでは、より簡単な(より良い)実装は、別のApiControllerクラスを持つことです。これは基本的なCRUD操作をオブジェクト型のHTTPメソッドにマッピングするREST APIデザインの原則に従います。

あなたの意図は、これらのパラメータオブジェクトに基づいて操作を実行することであれば、以下のようにエンドポイントのAPIを経由してルーティング意図を明確に:

public class TestController : ApiController 
{ 
    [HttpPost] 
    [Route("ETLLoad/Database/source")] 
    public void Post([FromBody]DatabaseSource source) //method one 
    { 
    } 

    [HttpPost] 
    [Route("ETLLoad/Folder/source")] 
    public void Post([FromBody]FolderSource source) //method two 
    { 
    } 

} 
関連する問題