asp.net-web-api – Web API中的多态:单端点可能?

前端之家收集整理的这篇文章主要介绍了asp.net-web-api – Web API中的多态:单端点可能?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我意识到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]类型也被支持…)?

原文链接:https://www.f2er.com/aspnet/250344.html

猜你在找的asp.Net相关文章