当前位置: 首页 > 知识库问答 >
问题:

Web API模型绑定和验证属性asp.net问题

杨凌
2023-03-14

我正在用ASP. NET网络应用编程接口编写一个网络应用编程接口,并使用以下视图模型。当一个特定属性上有两个验证属性(即[必需的]和[字符串长度(10)])时,我似乎对数据绑定有问题。

当将JSON值从客户端发布到窗体的控制器操作时:

//发布api/列表

公开作废帖子([FromBody]TaskViewModel taskVM)

我认为:

  • 如果我删除多个属性中的一个,则所有属性都绑定OK;
  • 如果我在多个属性中离开,客户端会收到500个内部服务器错误,并且Post方法的主体永远不会到达。

知道为什么会这样吗?干杯

public class TaskViewModel
{

    //Default Constructor
    public TaskViewModel() { }


    public static TaskViewModel MakeTaskViewModel(Task task) 
    {
        return new TaskViewModel(task);
    }

    //Constructor
    private TaskViewModel(Task task)
    {
        this.TaskId = task.TaskID;
        this.Description = task.Description;
        this.StartDate = task.StartDate;
        this.Status = task.Status;
        this.ListID = task.ListID;
    }

    public Guid TaskId { get; set; }

    [Required]
    [StringLength(10)]
    public string Description { get; set; }

    [Required]
    [DataType(DataType.DateTime)]
    public System.DateTime StartDate { get; set; }

    [Required]
    public string Status { get; set; }        

    public System.Guid ListID { get; set; }       
}

共有1个答案

冯飞鹏
2023-03-14

你需要检查500内部服务器里面有什么

  • 确保您在web中关闭了customerror。配置

然后你可以看到服务器上出了什么问题,并进一步解决你的问题。

在你的情况下,答案如下:

消息”:“发生错误。”,“异常消息”:“MVCpApdio3.3。控制器。TaskVIEW模型”的“属性”开始日期无效。标记为“必需”的值类型的属性也必须标记为[DATAMEMPORE(ISDATION = TRUE)]。“异常类型”:“System.InvalidOperationException”

所以你的问题不是你有两个属性,而是你用[Required]标记了你的属性。为了解决这个问题,异常会告诉你该怎么做。

您需要将[Data成员(Is必需=true)]添加到您所需的属性中,其中属性类型是值类型(例如int,datatime等):

因此,将您的TaskViewModel更改为:

[DataContract]
public class TaskViewModel
{

    //Default Constructor
    public TaskViewModel() { }

    [DataMember]
    public Guid TaskId { get; set; }

    [Required]
    [DataMember]
    [StringLength(10)]
    public string Description { get; set; }

    [Required]
    [DataMember(IsRequired = true)]
    [DataType(DataType.DateTime)]
    public System.DateTime StartDate { get; set; }

    [Required]
    [DataMember]
    public string Status { get; set; }

    [DataMember]
    public System.Guid ListID { get; set; }
}

一些旁注:

  • 你需要参考系统。运行时。序列化dll以使用DataMemberAttribute
 类似资料:
  • 本文向大家介绍asp.net core系列之模型绑定和验证方法,包括了asp.net core系列之模型绑定和验证方法的使用技巧和注意事项,需要的朋友参考一下 一. 模型绑定 ASP.NET Core MVC 中的模型绑定,是将 HTTP 请求中的数据映射到 action方法参数。   这些参数可能是简单类型的参数,如字符串、整数或浮点数,也可能是复杂类型的参数。  当 MVC 收到 HTTP 请

  • As we learned earlier in the book, the validate method on a Model is called before set and save, and is passed the model attributes updated with the values from these methods. By default, where we def

  • 我为我的模型定制了一个 : 我希望当在请求中传递无效值时,HTTP400错误请求将自动返回。然而,这种情况并不发生。如果存在任何绑定错误,应该怎样做才能使Web API返回HTTP400?

  • javafx属性是将数据模型连接到javafx gui的好方法,因为它们的绑定模型实现了强大的通知更新机制。 属性和绑定并不严格地与GUI相关,而是对JavaBeans的扩展。 因此,我们希望在应用程序模型类中使用它们,而不引入对包的依赖关系,并且通常来自. 换句话说:(update) 我可能需要将应用程序分成两个模块。 一个模块应该只包含操作数据的类(模型类,说MVC)。 第二个模块将包含所有图

  • 我有一个ASP. NET核心Web API。 一个endpoint,它接受一个名为搜索的模型。它有一个名为表达式类型查询的属性。这个表达式对象有子类。 我将以下JSON发布到我的endpoint(应用程序的内容类型/JSON) {"查询":{"字段ID":"主体","值":"蛋糕","运算符":"匹配"}} 首先,查询参数只是基本表达式——一个多态性问题! 所以我以为是定制的模型活页夹。 我可以针

  • 我正在使用ASP.NET Web API和Code First实体框架,从我所读到的内容来看,您通常应该在操作方法中直接公开DTO对象,而不是实体对象(根据http://www.asp.net/web-api/overview/data/using-web-api-with-entityframework/part-5)。 因此,在我正在处理的一个案例中,为了避免上面链接中描述的“过度发布”问题,