我有一个不允许nvarchar即unicode字符的SQL数据库。 有没有办法让我在休息服务(使用web api构建)上设置编码,以便在请求包含非ascii unicode字符时失败?
答案 0 :(得分:0)
您可以使用.NET的内置编码器来实现字符集验证。
Encoding
课程可让您访问所有编码。
每个Encoding
个实例允许使用方法string
和byte[]
从GetBytes(string)
转换为GetString(byte[])
,反之亦然。
GetBytes
方法用'?'替换不可转换的字符问号。您可以更改此行为以获取异常。
以下代码检查非ISO-8859-1字符并在无效字符上引发异常。
[TestMethod]
public void VerifyEncoding_UTF8CharsGiven()
{
var value = "hello ☃❆⛇✺⑳⑯✵ȳה";
var encoding = Encoding.GetEncoding("iso-8859-1", EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback);
try
{
var bytes = encoding.GetBytes(value);
Assert.Fail("EncoderFallbackException should have occured");
}
catch (EncoderFallbackException ex)
{
// Unable to translate Unicode character \u1F384 at index 6 to specified code page.
Debug.WriteLine(ex.Message);
}
}
这个显示成功的编码匹配,因为没有异常发生。
[TestMethod]
public void VerifyEncoding_CorrectCharsGiven()
{
var value = "hello my friends";
var encoding = Encoding.GetEncoding("iso-8859-1", EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback);
var bytes = encoding.GetBytes(value); // no exception
}
您可以使用此代码创建验证属性,或按您希望的方式进行验证。您可能希望创建自己的DecoderFallback
,它不会抛出异常,并出于性能原因调用回调。