我正在通过后请求将数据发送到IIS。一切工作正常,但现在我意识到我无法向IIS发送空值。无论我做什么,响应数据都不会被识别为空。
这是Wireshark嗅到的后数据:
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网络方法中的代码:
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: | |
如您所见,whireshark中的数据仅为一个字节,即为0。在我的web方法中,C#代码中数据的字节数组表示仍然仅为一个字节,即为0。 但是字符串本身不为null,也不为空字符串,甚至也不是空格,因为该代码不会运行到单个if语句中。
我在这里想念什么?我需要将此字符串识别为null,因此可以在数据库中而不是“”或“”中写入DBNull.Value。
感谢您的帮助,谢谢。
编辑: 知道了Null是有效的字符。 这是发送站点(在Xamarin.iOS中),我可能最好开始一个新主题,并询问Xamarin伙计们如何发送空值。
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,但这当然是同样的问题...
答案 0 :(得分:3)
这是因为字符串既不为null也不为空。它包含一个字符('\ 0')
空('\ 0')是完全可以的字符,因此此行为是正确的。
您可以通过将字符串与beschreibung == "\0"
进行比较来进行测试
托马斯
答案 1 :(得分:0)
如果您要发送一个空字符串-请发送一个空字符串:
postBody.AppendData(new NSString("").Encode(NSStringEncoding.UTF8));
正如我在另一条评论中所说,“字符串是由空字符结尾的字符数组”是c的((特征/错误)),并且 most 的最新语言都认识到空字符是完全有效的在字符串之内。