關于 WebRequest.RegisterPrefix

RegisterPrefix 方法將 WebRequest 子代注冊到服務請求。 WebRequest 后代通常被注冊來處理特定的協議(例如 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模式來處理,不過總的感覺,很麻煩。

?

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

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

image

?

第一個prefix,是前綴的意思,例如 ftp://192.168.0.1 ,那么以后針對這個prefix的所有請求都會自動的調用creator Create方法來創建WebRequest 對象。之所以創建的是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 來創建WebRequest對象了,而CredentialsWebRequestCreater 類的Create方法就會去添加用戶名和密碼了。

?

這樣就可以直接綁定了,例如:

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

轉載于:https://www.cnblogs.com/LoveJenny/archive/2011/11/22/2258251.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377979.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377979.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377979.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode 404. 左葉子之和思考分析

題目 計算給定二叉樹的所有左葉子之和。 如果是下面的樹&#xff0c;只有一個左葉子結點4 思考分析 由此我們可以得到左葉子結點的定義&#xff1a; cur->left !NULL && cur->left->leftNULL && cur->left->rightNULL 遞歸遍歷累積操作 …

天王蓋地虎

1&#xff0c;求有序數列中某個元素的個數 思想&#xff1a;二分找上下界&#xff1a; int element_count(int * set, int len, int e) {int f, a, b, t;for(a 0, b len - 1; a < b; set[t a b >> 1] < e ? (a t 1) : (b t - 1));for(f a, b len - 1; a…

ruby array_Ruby中帶有示例的Array.cycle()方法

ruby arrayArray.cycle()方法 (Array.cycle() Method) In this article, we will study about Array.cycle() method. You must be a little more excited to read about Array.cycle method due to its catchy name as I was pretty amazed after reading this method. In the…

十八、對已經找到輪廓的圖像進行測量

圖像輪廓的獲取可參考博文十七 一、相關原理 1&#xff0c;弧長和面積 對于弧長和面積&#xff0c;計算出來的輪廓單位都是像素 2&#xff0c;多邊形擬合 每一個輪廓都是一系列的點&#xff0c;然后通過多邊形進行擬合&#xff0c;無限的接近真實形狀 相關API&#xff1a;…

Linux 終端登錄SSH:解決SSH的Access Denied 和 make xconfig的使用

對于SSH&#xff1a; 可以不是用putty&#xff0c;尤其是putty出現 Access denied 的時候&#xff0c;請換用konsole 或者其他終端 &#xff08;如 terminal&#xff09;在command line中&#xff1a; # ssh 要訪問的主機ip eg &#xff1a; ssh 192.168.111 然后確定…

LeetCode 513. 找樹左下角的值 思考分析

題目 給定一個二叉樹&#xff0c;在樹的最后一行找到最左邊的值。 遞歸解 左下角要滿足兩個條件&#xff1a; 1、深度最大的葉子結點 2、最左結點&#xff1a;使用前序遍歷&#xff0c;優先左邊搜索。 1、確定遞歸函數的參數和返回值 參數&#xff1a;樹的根結點&#xff…

利用MyBatis的動態SQL特性抽象統一SQL查詢接口

1. SQL查詢的統一抽象 MyBatis制動動態SQL的構造,利用動態SQL和自定義的參數Bean抽象,可以將絕大部分SQL查詢抽象為一個統一接口,查詢參數使用一個自定義bean繼承Map,使用映射的方法構造多查詢參數.在遇到多屬性參數(例如order by,其參數包括列名,升序降序類型,以及可以多個列及…

ctype函數_PHP Ctype(字符類型)函數

ctype函數Ctype功能 (Ctype functions) PHP provides some of the built-in functions, which are used to verify the characters in the string i.e. to check whether a string contains the characters of specific types. PHP提供了一些內置函數&#xff0c;這些函數用于驗…

Linux 平臺下 MySQL 5.5 安裝 說明 與 示例

一.下載說明前期的一些準備說明&#xff0c;參考&#xff1a;MySQL 發展史http://blog.csdn.net/tianlesoftware/article/details/6999245Mysql 不同版本 說明http://blog.csdn.net/tianlesoftware/article/details/6723117 MySQL 分為Community Server 和 Enterprise Edition。…

開始python之旅

接觸python緣于工作所需&#xff0c;曾經接觸過C、C等語言&#xff0c;對于編程語言在學習上大體是一個套路&#xff0c;當然套路因人而異&#xff0c;適合就好。接下來&#xff0c;我將不斷分享python的知識和學習技巧&#xff0c;共同學習。 起源 初識一門語言善于先了解語言…

LeetCode 112. 路徑總和 、113. 路徑總和 II 思考分析

目錄112. 路徑總和題目遞歸解遞歸解&#xff0c;其他人的解法迭代解&#xff0c;其他人的解法113. 路徑總和 II題目遞歸解遞歸解&#xff0c;參考別人的思路112. 路徑總和 題目 給定一個二叉樹和一個目標和&#xff0c;判斷該樹中是否存在根節點到葉子節點的路徑&#xff0c;…

kotlin 查找id_Kotlin程序查找矩陣的轉置

kotlin 查找idA transpose of a matrix is simply a flipped version of the original matrix. We can transpose a matrix by switching its rows with its columns 矩陣的轉置只是原始矩陣的翻轉形式。 我們可以通過切換矩陣的行和列來轉置矩陣 Given a matrix, we have to…

[mongodb翻譯]分片和故障轉移

一個配置恰當的mongodb 分片集群不會有單點失效。 本章節描述了集群服務器中可能出現的故障&#xff0c;及相應的對策。 1. 某個mongos路由進程故障 每一個mongos會運行每一臺應用服務器上面&#xff0c;該應用服務器只能通過這個mongos進程和集群進行通信。mongos進程不是…

看張子陽的書真是收獲很多,也醒悟了很多(一)

摘錄&#xff1a; 這是有一次開會時&#xff0c;我的老總跟我們說了這樣一個事例&#xff1a;通常來說&#xff0c;醫生是很高尚的職業&#xff08;暫不考慮國內醫生的負面新聞&#xff09;&#xff0c;尤其是牙科醫生&#xff0c; 他們有著體面的工作并且收入不菲。但是&#…

【C++ grammar】抽象、封裝與this指針

目錄1、Abstraction and Encapsulation&#xff08;抽象與封裝&#xff09;1. Data Field Encapsulation (數據域封裝)2. Accessor and Mutator (訪問器與更改器)2.1. To read/write private data, we need get/set function (為讀寫私有數據&#xff0c;需要get/set函數)2.2. …

java創建臨時文件_用Java創建一個臨時文件

java創建臨時文件The task is to create a temporary file in Java. 任務是用Java創建一個臨時文件。 Creating a temporary file 創建一個臨時文件 To create a temporary file in java – we use createTempFile() method of "File" class. The createTempFile()…

十九、圖像的形態學操作

一、圖像形態學 圖像形態學是圖像處理學科的一個單獨分支學科 主要針對的是灰度圖和二值圖像 是由數學的集合論以及數學中的拓撲幾何原理發展而來 二、膨脹操作&#xff08;dilate&#xff09; 33的卷積核 以33為卷積核從左往右(從上往下)開始運行&#xff0c;若這卷積核…

X名稱空間(WPF)

筆記簡述 閑話x名稱空間簡要x名稱空間的Attributex名稱空間的標簽擴展x名稱空間的XAML指令元素閑話 本筆記參考與《深入淺出WPF》、MSDN、Some Blog… MSDN的飛機票點這里。 x名稱空間簡要 在VS中新建個WpfApplication都會自動生成xmlns:x"http://schemas.microsoft.com/w…

基于Bresenham和DDA算法畫線段

直線&#xff1a;ykxb 為了將他在顯示屏上顯示出來&#xff0c;我們需要為相應的點賦值&#xff0c;那么考慮到計算機的乘法執行效率&#xff0c;我們肯定不會選擇用Ykxb這個表達式求值&#xff0c;然后進行畫線段。 我們應當是將它轉化為加法運算。 下面提供兩種常見的算法&am…

leetcode 106. 從中序與后序遍歷序列構造二叉樹 105. 從前序與中序遍歷序列構造二叉樹思考分析

目錄1、106題目2、參考思路&#xff1a;遞歸切割數組3、105題目4、同樣思路的代碼1、106題目 2、參考思路&#xff1a;遞歸切割數組 代碼參考&#xff1a;公眾號&#xff1a;代碼隨想錄 后序數組中序數組 以 后序數組(左右中)的最后一個元素作為切割點&#xff0c;先切中序數組…