我想实现某种功能,但我不知道从哪里开始。我将描述我所拥有的。
后端
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。这个例子大大简化了。
答案 0 :(得分:1)
您的实现与您在代码中指定的内容不一致。
在前端,您描述的对象具有sourceType
字段和source
对象属性,而在后端,您正在重载ApiController
方法并映射不同的REST对象资源到单个HTTP方法和端点(我相信它不起作用)。
ApiController
没有神奇的方法可以使用enum
属性自动区分对象类型。
更简单(更好)的实现是为ApiController
和Database
源对象POST调用提供单独的Folder
类。这遵循REST API设计的原则,您基本上将基本CRUD操作映射到具有对象类型的HTTP方法。
如果您打算基于这些参数对象执行操作,请通过端点的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
{
}
}