宁波网站制作方案,怎样建个自己的网站,crm订单管理系统,企业网站备案在哪个部门RegisterPrefix 方法将 WebRequest 子代注册到服务请求。 WebRequest 后代通常被注册来处理特定的协议#xff08;例如 HTTP 或 FTP#xff09;#xff0c;但也可能被注册来处理对特定服务器或服务器上的路径的请求。 已注册的预注册保留类型包括下列类型#xff1a; htt…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} Height32 StretchUniform/ 这样有什么问题吗 这样直接绑定会抛出异常因为ftp需要用户名密码登陆后才能访问资源。 可以采用间接的方式例如在C#代码中使用WebClient来获取FtpUrl 的Stream然后进行处理。 所以代码中会有大量的 webClient.Credentials new NetworkCredential(WQ, 123456); 当然了你也可以使用Factory模式来处理不过总的感觉很麻烦。 其实微软很早就发现了这类问题所以WebClient才提供了WebClient.Create 的方法看到Create让你想到了什么吗没错就是工厂。 如果我们能够让所有提交到ftp://192.168.0.1 的WebClient都自动的加上Credentials那就解决了这个问题而如何实现这个功能那就需要使用RegisterPrefix 方法了。 第一个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} Height32 StretchUniform/ 转载于:https://www.cnblogs.com/LoveJenny/archive/2011/11/22/2258251.html