我意识到Web API是REST集中的,但我仍然希望配置一个可以处理Command / Response方案的单一控制器方法.到目前为止我还没有成功…有没有办法让一个API端点识别下面的类结构?
[Serializable] public abstract class Command{ public int CommandId{get; set;} } [Serializable] public class RegisterNewPersonCommand:Command{ public string Name{get; set;} } //etc... various Command subclasses. Similar thing for Responses. //now have a single endpoint to Handle Commands public class CommandsController : ApiController{ public Response HandleCommand(Command command){ //handle Command based on which subclass it is //return appropriate Response subclass } }
到目前为止,似乎序列化系统似乎不能处理这种情况,但希望有人能找到一种方法:)
解决方法
为了使多态性在Web API中工作,您需要启用类型名称处理,并且数据必须包含类型信息.
如果您在场景中使用JSON,则需要在WebApiConfig.cs中打开TypeNameHandling:
config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All;
然后,您发送到您的HandleCommand(…)操作的内容正文必须包含类型信息:
{"$type":"MvcApplication.Models.RegisterNewPersonCommand,MvcApplication",... }
对于XML,您需要使用DataContract的KnownType …
顺便提一下,是否有任何具体的原因您使用[Serializable](因为POCO类型和[DataContract]类型也被支持…)?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。