ASP.NET Coreホスト名取得時の「Decoded string is not a valid IDN name」エラー

974 ワード

ASP.NET CoreでRequest.Host.Hostでホスト名(hostname)を取得した場合、ホスト名に非ASCII文字(puny codeなど)が含まれていると、次のような異常が発生します.
System.ArgumentException : Decoded string is not a valid IDN name. (Parameter 'ascii')
Stack Trace:
    at System.Globalization.IdnMapping.ThrowForZeroLength(Boolean unicode)
at System.Globalization.IdnMapping.GetUnicodeCore(String asciiString, Char* ascii, Int32 count)
at System.Globalization.IdnMapping.GetUnicode(String ascii, Int32 index, Int32 count)
at System.Globalization.IdnMapping.GetUnicode(String ascii, Int32 index)
at System.Globalization.IdnMapping.GetUnicode(String ascii)
at Microsoft.AspNetCore.Http.HostString.FromUriComponent(String uriComponent)
at Microsoft.AspNetCore.Http.DefaultHttpRequest.get_Host()
Request.Headers[HeaderNames.Host].ToString()に変更するとこの問題を回避できますが、urlにポート番号(例えばhttps://localhost:5000)が含まれている場合、得られたホスト名にもポート番号、例えばlocalhost:5000が含まれている点に注意してください.