Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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#:字节0未被识别为空值_C#_Iis_C - Fatal编程技术网

C#:字节0未被识别为空值

C#:字节0未被识别为空值,c#,iis,c,C#,Iis,C,我正在通过post请求向我的IIS发送数据。一切正常,但现在我意识到我不能向IIS发送空值。无论我尝试什么,响应数据都不会被识别为null 以下是使用wireshark嗅探的post数据: Encapsulated multipart part: Content-Disposition: form-data; name="@Beschreibung"\n\r\n Data (1 byte) Data: 00 [Length: 1] Boundary: \r\n--*****\r\n 下面是我

我正在通过post请求向我的IIS发送数据。一切正常,但现在我意识到我不能向IIS发送空值。无论我尝试什么,响应数据都不会被识别为null

以下是使用wireshark嗅探的post数据:

Encapsulated multipart part: 
Content-Disposition: form-data; name="@Beschreibung"\n\r\n
Data (1 byte)
Data: 00
[Length: 1]
Boundary: \r\n--*****\r\n
下面是我的IIS webmethod中的代码:

            HttpContext postedContext = HttpContext.Current;

            var bytes = Encoding.Default.GetBytes(postedContext.Request.Form["@Beschreibung"]);

            var beschreibung = Encoding.UTF8.GetString(bytes);
            log.Info("BYTE ARRAY START");
            foreach (byte b in bytes)
            {
                log.Info(b);
            }
            log.Info("BYTE ARRAY ENDE");

            log.Info("Beschreibung: |" + beschreibung + "|");
            if (beschreibung == null)
                log.Info("IST NULL");

            if (string.IsNullOrEmpty(beschreibung))
                log.Info("IST NULL OR EMPTY");

            if (string.IsNullOrWhiteSpace(beschreibung))
                log.Info("IST NULL OR WHITESPACE");
以及日志输出:

2018-07-31 10:59:09,826 [24] INFO - BYTE ARRAY START
2018-07-31 10:59:09,826 [24] INFO - 0
2018-07-31 10:59:09,826 [24] INFO - BYTE ARRAY ENDE
2018-07-31 10:59:09,826 [24] INFO - Beschreibung: | |
如您所见,其中共享的数据只有一个字节,即0。在我的webmethod中,C#代码中数据的bytearray表示仍然只有一个字节是0。 但是字符串本身不是null,也不是空字符串,它甚至不是空白,因为代码不会在单个if语句中运行

我错过了什么?我需要将此字符串识别为null,以便可以在数据库中写入DBNull.Value,而不是“”或“”

感谢您的帮助,提前谢谢

编辑: 好的,明白了。Null是一个有效的字符。。。 这是发送站点(在Xamarin.iOS中),我最好开始一个新的主题,问问Xamarin的家伙们如何发送null

var postBody = new NSMutableData();
        postBody.AppendData(new NSString(twoHyphens + boundary + lineEnd).Encode(NSStringEncoding.UTF8));
        postBody.AppendData(new NSString("Content-Disposition: form-data; name=\"@Beschreibung\"" + crlf).Encode(NSStringEncoding.UTF8));
        postBody.AppendData(new NSString(lineEnd).Encode(NSStringEncoding.UTF8));
        postBody.AppendData(new NSString("\0").Encode(NSStringEncoding.UTF8));
        postBody.AppendData(new NSString(lineEnd).Encode(NSStringEncoding.UTF8));
        postBody.AppendData(new NSString(twoHyphens + boundary + lineEnd).Encode(NSStringEncoding.UTF8));
在第5行中,我将数据发送为“\0”。 早些时候我把它和

byte zero = 0;
postbody.AppendBytes(new byte[]{zero};

所以只发送一个字节0,但这当然是同一个问题…

这是因为sting既不是null也不是空的。它包含一个字符(“\0”)

Null('\0')是一个完全正常的字符,因此此行为是正确的

您可以通过将字符串与
beschreibung==“\0”


托马斯这是因为刺不是空的,也不是空的。它包含一个字符(“\0”)

Null('\0')是一个完全正常的字符,因此此行为是正确的

您可以通过将字符串与
beschreibung==“\0”


Thomas

如果要发送空字符串,请发送空字符串:

postBody.AppendData(new NSString("").Encode(NSStringEncoding.UTF8));

正如我在另一篇评论中所说,“字符串是以空字符结尾的字符数组”是最新语言的一个特点/错误,最新语言认识到空字符在字符串中完全有效。

如果要发送空字符串,请发送空字符串:

postBody.AppendData(new NSString("").Encode(NSStringEncoding.UTF8));

正如我在另一篇评论中所说,“字符串是以空字符结尾的字符数组”是最新语言的一个特点/错误,最新语言认识到空字符在字符串中是完全有效的。

您最好将数据发布为JSON或类似的格式。空字符由代码点0表示,是包含在
字符串中的完全有效的字符。您发送的字符串只包含这一个字符,这就是您的代码接收到的内容。这样的字符串与
null
引用不同,我认为它不被视为空白。因此,当它发送包含空字符的字符串时,如果您希望它发送空字符串,那么问题似乎出现在发送端。由于我们不知道发送端是什么样子,因此无法提供修复建议。您最好将数据发布为JSON或类似的格式。由代码点0表示的空字符是包含在
字符串中的完全有效的字符。您发送的字符串只包含这一个字符,这就是您的代码接收到的内容。这样的字符串与
null
引用不同,我认为它不被视为空白。因此,当它发送包含空字符的字符串时,如果您希望它发送空字符串,那么问题似乎出现在发送端。因为我们不知道发送端是什么样子,所以我们无法提供修复它的建议。嗯,我确实将数据作为新的NSString(“\0”).Encode(NSStringEncoding.UTF8)发送,但我认为稍后会将其识别为null。是否有机会发送“真实”空值?如果不是,我会用你的比较。谢谢。@Tobe-您似乎在应用约定(字符串以空字符结尾)并在其他情况下应用它。我不能谈论NSString,但C#字符串可以包含空字符,而C“字符串”不能。如果
new NSString(“”)
在该环境中为您提供了一个实际的空字符串(Objective C?),我不会感到非常惊讶。从您展示的代码来看,NSString也可以包含空字符。嗯,我确实将数据作为新的NSString(“\0”).Encode(NSStringEncoding.UTF8)发送,但我认为稍后会将其识别为空。是否有机会发送“真实”空值?如果不是,我会用你的比较。谢谢。@Tobe-您似乎在应用约定(字符串以空字符结尾)并在其他情况下应用它。我不能谈论NSString,但C#字符串可以包含空字符,而C“字符串”不能。如果
new NSString(“”)
在该环境中为您提供了一个实际的空字符串(Objective C?),我不会感到非常惊讶。从您展示的代码来看,NSString也可以包含空字符。我不想发送空字符串。我想发送一个null对象,这样数据库条目将是DBNull而不是“”,在某些情况下,这在我的数据库中是一个很大的区别。好的,所以真正的问题是,没有“null字符串”这样的东西。例如,在C#中,要么有对字符串的引用,要么有空引用。如果我没记错的话,过帐表单数据的常规约定是根本不指定参数/值组合。然后,在尝试访问表单数据的值之前,通过检查表单数据中是否存在
@Beschreibung
来确定。好的,谢谢。我现在可能只需要检查beschreibung==“\0”。用户不太可能在文本框或其他地方输入这些内容,这样就可以做到:-)我不想发送空字符串。我想发送一个空对象,以便