【问题标题】:Http request send child typeHttp请求发送子类型
【发布时间】:2015-08-23 08:03:27
【问题描述】:

我有一个在 javascript 级别使用 Angular 的 MVC Web 应用程序。我正在尝试使用与此类似的对象发出 HTTP 请求:

public class Template
{
    public string Id { get; set; }
    //other properties
    public Enum Status { get; set; } //can be either of type InboundEnum or OutboundEnum
}

问题是我有两种可能的Enum 类型(一种称为InboundEnum,一种称为OutboundEnum)。通常,当我使用 Angular 的 $http.post() 时,请求会正确地将其他 JSON 转换为正确的 Enum 值,因为它具有特定的 Enum(如 InboundEnum)。

两个Enums

public enum InboundEnum
{
    Undefined = 0,
    Deleted,
    Saved,
    Pending,
    Completed,
    Cancelled
};

public enum OutboundEnum
{
    Undefined = 0,
    Deleted,
    Saved,
    Rejected,
    InTransit,
    Completed,
    Cancelled
};

目前,我发送的 javascript 对象如下所示:

{
    id: 'Id001`,
    status: 'Saved' //I know it's currently ambiguous which enum to use.  Solution?
}

如何将正确键入的值输入 MVC API 控制器(如 InboundEnum.SavedOutboundEnum.Canceled)?有没有比附加Template.EnumType 属性和使用switch 语句来获得正确的Enum 更优雅的方式来处理Enum 的正确类型?

如果我在这里有反模式,请也告诉我。

【问题讨论】:

    标签: c# asp.net-mvc angularjs enums


    【解决方案1】:

    如果您可以在您的应用程序中使用JSON.NET,那么它可以解决您的问题。您不必在请求中传递枚举类型,但必须在服务器端的模型中指定某些属性。

    public class Template
    {
        public string Id { get; set; }
        //other properties
        [JsonConverter(typeof(StringEnumConverter))]
        public Enum Status { get; set; }
    }
    

    【讨论】:

    • 对不起,让我说得更清楚一些。我的问题是Status 可以是客户端javascript 级别已知的两种不同类型 之一。我将编辑我的问题来解决这个问题。
    • 但是 JSON.NET 是一个选项。
    • 在这种情况下,您肯定需要知道枚举类型是什么,以便您可以尝试相应地解析它。
    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2011-08-21
    • 2012-01-09
    相关资源
    最近更新 更多