C# 区分ASP.NET MVC4中的空参数和缺少的参数
我正在写一个API。我想允许PUT方法更新资源。下面是一个表示资源的示例模型对象-C# 区分ASP.NET MVC4中的空参数和缺少的参数,c#,asp.net-mvc,C#,Asp.net Mvc,我正在写一个API。我想允许PUT方法更新资源。下面是一个表示资源的示例模型对象- var resourceToUpdate = new TestResourceModel() { Id = 5 Name = "testName", Description = "description", etc... } 我希望客户机能够将其放入/TestResource/5以更新资源的属性 现在,假设客户端只想更新属性名称,
var resourceToUpdate = new TestResourceModel()
{
Id = 5
Name = "testName",
Description = "description",
etc...
}
我希望客户机能够将其放入/TestResource/5以更新资源的属性
现在,假设客户端只想更新属性名称,而不想更新描述,因此发送以下请求:
Name="testNewName"
在这种情况下,应该更新资源,使名称现在为“testNewName”,put Description仍然为“Description”
如何区分这种情况(在我的控制器方法中)与客户机希望将Description属性设置为null的情况:
Name="testNewName"
Description=
正如我的控制器方法所示:
[HttpPut]
public ActionResult Index(TestResourceModel model)
{
//True in both cases
bool descriptionSet = model.Description == null;
您必须将传入值与要更新的值进行比较。。我的意思是null是null是null:)
Alt.在模型中设置一个更新标志(bool isUpdate),然后只更改非空值。您可以空值检查属性。我认为这并不能解决问题。我的观点是——在这种情况下,null不是null——在发布“Set Description null”的客户机和发布不引用Description的请求的客户机之间存在区别。。当您将模型发送到它包含的视图时:Id=5 Name=“testName”Description=“Description”u将更改您想要的任何内容,并将模型放入更新中。如果您没有更改描述,它怎么会变为空?这是针对API的。因此没有涉及任何观点。外部客户端直接向控制器发出请求。我想区分他们何时发送参数“Description=”以将Description设置为null,以及何时不包括该参数(表示他们不想更改该参数)。。但这是一样的。为什么要在客户端和服务器之间发送“部分”对象。如果总是发送“完整”对象,则无需进行比较,只需将服务器对象设置为与传入的客户端对象相同。