22871


UWPアプリで短縮URLの展開をしているのですが、goo.glやbit.lyは問題ないものの、t.coだけ展開できません。

[code]

            try
            {
                WebRequest req = WebRequest.Create(uri);
    
                using (WebResponse res = await req.GetResponseAsync())
                {
                    string realUrl = res.ResponseUri.AbsoluteUri;
                    Debug.WriteLine(realUrl);
                    return true;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                return false;
            }
    
[/code]

エラーの内容は次のとおりです。

[code]

    例外がスローされました: 'System.Net.WebException' (mscorlib.ni.dll の中)
    System.Net.WebException: An error occurred while sending the request.
    The text associated with this error code could not be found.
    
    A redirect request will change a secure to a non-secure connection
    ---> System.Net.Http.HttpRequestException: An error occurred whilesending the request. 
    ---> System.Runtime.InteropServices.COMException: The text associated with this error code could not be found.
    
[/code]

どうしたら解決できるかわかる方いらっしゃらないでしょうか？よろしくお願いします。


CC BY-SA 3.0
2016-03-06T19:53:39.123
22868
2016-03-07T01:33:10.200
14674
question
c#
UWPアプリでt.coだけ短縮URLを展開できない


t.co固有の問題ではなく、httpsからhttpへのリダイレクトが許可されていないためにセキュリティの観点から例外がスローされています。

これに対処するにはリクエストの`AllowAutoRedirect`を指定する必要がありますが、UWPでは使用できないので`HttpClientHandler`等で代用する必要があります。

[code]

    HttpClientHandler handler = new HttpClientHandler();
    handler.AllowAutoRedirect = false;
    
    HttpClient client = new HttpClient(handler);
    
    try
    {
        using (HttpResponseMessage res = await client.GetAsync(uri))
        {
            string realUrl = res.Headers.Location.AbsoluteUri;
            Debug.WriteLine(realUrl);
            return true;
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex);
        return false;
    }
    
[/code]


CC BY-SA 3.0
2016-03-07T01:33:10.200
22871
2016-03-07T01:33:10.200
5750
22868
answer