欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于WebRequest.RegisterPrefix的使用詳解

 更新時間:2013年05月13日 16:05:11   作者:  
本篇文章對WebRequest.RegisterPrefix的使用進行了詳細的分析介紹,需要的朋友參考下

RegisterPrefix 方法將 WebRequest 子代注冊到服務請求。 WebRequest 后代通常被注冊來處理特定的協(xié)議(例如 HTTP 或 FTP),但也可能被注冊來處理對特定服務器或服務器上的路徑的請求。

已注冊的預注冊保留類型包括下列類型:

    http://

    https://

    ftp://

    file://

msdn的解釋是:將WebRequest子代注冊到服務請求,很短,很抽象,不夠白話,如果你一開始就理解這句話的意思,那我只能說你的智商很高,技術也很好。

我先不說RegisterPrefix是什么意思,先看下我碰到的問題。

在http上傳 vs ftp上傳中,因為有大文件,并且客戶端是wpf,所以我選擇了ftp上傳,結果就是文件的上傳路徑是:

ftp://192.168.0.1/ 6be490e3-d383-4167-8cbd-b833f31d855cDesert.jpg

ftp 的用戶名是WQ,密碼是123456.

因為ftp的路徑是圖片,所以我嘗試綁定到圖片上,例如

<Image Source="{Binding FtpUrl}" Height="32" Stretch="Uniform"/>

這樣有什么問題嗎?

這樣直接綁定會拋出異常,因為ftp需要用戶名,密碼登陸后才能訪問資源。

可以采用間接的方式,例如在C#代碼中使用WebClient來獲取FtpUrl 的Stream,然后進行處理。

所以代碼中會有大量的

webClient.Credentials = new NetworkCredential("WQ", "123456");

當然了,你也可以使用Factory模式來處理,不過總的感覺,很麻煩。

其實微軟很早就發(fā)現了這類問題,所以WebClient才提供了WebClient.Create 的方法,看到Create讓你想到了什么嗎?,沒錯,就是工廠。

如果我們能夠讓所有提交到ftp://192.168.0.1 的WebClient都自動的加上Credentials那就解決了這個問題,而如何實現這個功能,那就需要使用RegisterPrefix 方法了。

image


 第一個prefix,是前綴的意思,例如 ftp://192.168.0.1 ,那么以后針對這個prefix的所有請求都會自動的調用creator 的Create方法來創(chuàng)建WebRequest 對象。之所以創(chuàng)建的是WebRequest對象,是因為WebClient也繼承自WebRequest。 所以你new WebClient 的時候,內部會調用WebRequest.Create 方法返回的WebRequest.

所以需要新建一個CredentialsWebRequestCreater類來繼承IWebRequestCreate
 
代碼如下:

復制代碼 代碼如下:

public class CredentialsWebRequestCreater:IWebRequestCreate
{
    private string userName = string.Empty;
    private string password = string.Empty;
    public CredentialsWebRequestCreater(string userName, string password)
    {
        this.userName = userName;
        this.password = password;
    }
    public WebRequest Create(Uri uri)
    {
        WebRequest webRequest = WebRequest.CreateDefault(uri);
        webRequest.Credentials = new NetworkCredential(this.userName, this.password);
        return webRequest;
    }
}

這個類實現了IWebRequestCreate接口,所以可以被RegisterPrefix方法調用。

如何使用RegisterPrefix方法呢?
System.Net.WebRequest.RegisterPrefix(“ftp://192.168.0.1”,
                    new Utils.CredentialsWebRequestCreater(“WQ”,”123456”));
這樣注冊后,以后所有的對ftp://192.168.0.1 的請求都會使用CredentialsWebRequestCreater 來創(chuàng)建WebRequest對象了,而CredentialsWebRequestCreater 類的Create方法就會去添加用戶名和密碼了。

這樣就可以直接綁定了,例如:
<Image Source="{Binding FtpUrl}" Height="32" Stretch="Uniform"/>

相關文章

  • C#實現徹底刪除文件的方法

    C#實現徹底刪除文件的方法

    這篇文章主要介紹了C#實現徹底刪除文件的方法,可實現類似360粉碎文件的效果,是非常實用的技巧,需要的朋友可以參考下
    2014-11-11
  • C#雙向鏈表LinkedList排序實現方法

    C#雙向鏈表LinkedList排序實現方法

    這篇文章主要介紹了C#雙向鏈表LinkedList排序實現方法,涉及C#雙向鏈表的定義與排序技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#基礎入門之值類型和引用類型的區(qū)別詳析

    C#基礎入門之值類型和引用類型的區(qū)別詳析

    在C#中值類型的變量直接存儲數據,而引用類型的變量持有的是數據的引用,數據存儲在數據堆中,下面這篇文章主要給大家介紹了關于C#基礎入門之值類型和引用類型區(qū)別的相關資料,需要的朋友可以參考下
    2021-09-09
  • 總結C#動態(tài)調用WCF接口的兩種方法

    總結C#動態(tài)調用WCF接口的兩種方法

    這篇文章給大家總結了C#動態(tài)調用WCF接口的兩種方法,大家可以根據自己的需求選擇對應的方式,下面來一起看看。
    2016-09-09
  • WinForm實現按名稱遞歸查找控件的方法

    WinForm實現按名稱遞歸查找控件的方法

    這篇文章主要介紹了WinForm實現按名稱遞歸查找控件的方法,需要的朋友可以參考下
    2014-08-08
  • C#獲取本機IP地址和Mac地址的方法

    C#獲取本機IP地址和Mac地址的方法

    這篇文章主要介紹了C#獲取本機IP地址和Mac地址的方法,實例分析了C#網絡功能的基本技巧,需要的朋友可以參考下
    2015-05-05
  • C#泛型集合類型實現添加和遍歷

    C#泛型集合類型實現添加和遍歷

    這篇文章介紹了C#泛型集合類型實現添加和遍歷的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C#基于COM方式讀取Excel表格的方法

    C#基于COM方式讀取Excel表格的方法

    這篇文章主要介紹了C#基于COM方式讀取Excel表格的方法,涉及C# COM組件的調用與Excel表格的使用技巧,需要的朋友可以參考下
    2016-07-07
  • C#鍵盤輸入回車鍵實現點擊按鈕效果的方法

    C#鍵盤輸入回車鍵實現點擊按鈕效果的方法

    這篇文章主要介紹了C#鍵盤輸入回車鍵實現點擊按鈕效果的方法,可實現用回車鍵代替點擊按鈕的功能,是非常實用的技巧,需要的朋友可以參考下
    2014-09-09
  • C# File類中的文件讀寫方法詳解

    C# File類中的文件讀寫方法詳解

    C#提供了多種操作文件的方案,尤其是File類中封裝的靜態(tài)方法,本文將通過一些簡單的示例為大家講講C#讀寫文件的方法,需要的可以參考一下
    2023-05-05

最新評論