Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 区分ASP.NET MVC4中的空参数和缺少的参数_C#_Asp.net Mvc - Fatal编程技术网

C# 区分ASP.NET MVC4中的空参数和缺少的参数

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以更新资源的属性 现在,假设客户端只想更新属性名称,

我正在写一个API。我想允许PUT方法更新资源。下面是一个表示资源的示例模型对象-

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,以及何时不包括该参数(表示他们不想更改该参数)。。但这是一样的。为什么要在客户端和服务器之间发送“部分”对象。如果总是发送“完整”对象,则无需进行比较,只需将服务器对象设置为与传入的客户端对象相同。