3

私はdnsdynamic.orgを使用して、自宅でホストされている個人のWebサイトを指し示しています。私の自宅のIPアドレスは月に1回頻繁に変更されます。dnsdynamic.orgは、IPを更新するためのWebメソッド呼び出しを提供します。

https://username:password@www.dnsdynamic.org/api/?hostname=techno.ns360.info&myip=127.0.0.1

これをブラウザから呼び出すと、完璧に機能します。これをc#コードで呼び出そうとすると、次の例外がスローされます。

Invalid URI: Invalid port specified.
    at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
    at System.Net.WebRequest.Create(String requestUriString)

URLにコロンがあるため、system.uriはパスワードを整数として解析しようとしているように見えます。

.orgの後にポートを追加してみました

https://username:password@www.dnsdynamic.org:443

これでは運が悪い。

誰かがこのエラーを解決する方法を教えてもらえますか?

uriを作成しているときに、エスケープしないオプションとエスケープオプションを試してみましたが、まだ機能しません。

var ri = new Uri("https://username:password@www.dnsdynamic.org/api/?hostname=techno.ns360.info&myip=127.0.0.1",true);

編集:ユーザー名が問題を引き起こしているようです。私のユーザー名は私のメールアドレスです。そして私のメールアドレスは*.comで終わります。そのため、URIは私のパスワードを解析しようとしています。

この問題を解決する解決策はまだ見つかりません。dnsdyanmic.orgはメールアドレスをユーザー名として使用しているため、ユーザー名を変更できません。

4

1 に答える 1

7

を使用しHttpWebRequestてリクエストを作成している場合は、URIにクレデンシャルを含めないでください(おわかりのように、これは無効です)。

代わりに、に資格情報を追加し、HttpWebRequestそれらの通過を処理できるようにする必要があります。

// Only broke this up for readability
var uri = new Uri("https://www.dnsdynamic.org/api/?hostname=techno.ns360.info" + 
                  "&myip=127.0.0.1", true);
var cache = new CredentialCache();
cache.Add(uri, "Basic", new NetworkCredential("username", "password"));

var request = WebRequest.Create(uri);
request.Credentials = cache;
于 2013-03-20T20:32:22.340 に答える