基于WebRequest.RegisterPrefix的使用详解
RegisterPrefix方法将WebRequest子代注册到服务请求。WebRequest后代通常被注册来处理特定的协议(例如HTTP或FTP),但也可能被注册来处理对特定服务器或服务器上的路径的请求。
已注册的预注册保留类型包括下列类型:
http://
https://
ftp://
file://
msdn的解释是:将WebRequest子代注册到服务请求,很短,很抽象,不够白话,如果你一开始就理解这句话的意思,那我只能说你的智商很高,技术也很好。
我先不说RegisterPrefix是什么意思,先看下我碰到的问题。
在http上传vsftp上传中,因为有大文件,并且客户端是wpf,所以我选择了ftp上传,结果就是文件的上传路径是:
ftp://192.168.0.1/6be490e3-d383-4167-8cbd-b833f31d855cDesert.jpg
ftp的用户名是WQ,密码是123456.
因为ftp的路径是图片,所以我尝试绑定到图片上,例如
<ImageSource="{BindingFtpUrl}"Height="32"Stretch="Uniform"/>
这样直接绑定会抛出异常,因为ftp需要用户名,密码登陆后才能访问资源。
可以采用间接的方式,例如在C#代码中使用WebClient来获取FtpUrl的Stream,然后进行处理。
所以代码中会有大量的
当然了,你也可以使用Factory模式来处理,不过总的感觉,很麻烦。
其实微软很早就发现了这类问题,所以WebClient才提供了WebClient.Create的方法,看到Create让你想到了什么吗?,没错,就是工厂。
如果我们能够让所有提交到ftp://192.168.0.1的WebClient都自动的加上Credentials那就解决了这个问题,而如何实现这个功能,那就需要使用RegisterPrefix方法了。
第一个
所以需要新建一个CredentialsWebRequestCreater类来继承IWebRequestCreate
代码如下:
publicclassCredentialsWebRequestCreater:IWebRequestCreate
{
privatestringuserName=string.Empty;
privatestringpassword=string.Empty;
publicCredentialsWebRequestCreater(stringuserName,stringpassword)
{
this.userName=userName;
this.password=password;
}
publicWebRequestCreate(Uriuri)
{
WebRequestwebRequest=WebRequest.CreateDefault(uri);
webRequest.Credentials=newNetworkCredential(this.userName,this.password);
returnwebRequest;
}
}
这个类实现了IWebRequestCreate接口,所以可以被RegisterPrefix方法调用。
newUtils.CredentialsWebRequestCreater(“WQ”,”123456”));
这样注册后,以后所有的对ftp://192.168.0.1的请求都会使用CredentialsWebRequestCreater来创建WebRequest对象了,而CredentialsWebRequestCreater类的Create方法就会去添加用户名和密码了。
这样就可以直接绑定了,例如:
<ImageSource="{BindingFtpUrl}"Height="32"Stretch="Uniform"/>
相关文章
- Keil 使用教程(详解)「建议收藏」
- Postman使用教程详解「建议收藏」
- centos逻辑卷使用详解程序员
- UIDatePicker使用详解手机开发
- 《王者荣耀》unity安装及使用的小白零基础入门详解程序员
- HTable和HTablePool使用注意事项详解大数据
- 使用Android新式LruCache缓存图片,基于线程池异步加载图片详解编程语言
- struts2 使用总结详解编程语言
- Java使用正则表达式搜索文本内所有的email地址并打印出来详解编程语言
- 安全人员发现基于.NET平台且使用开源项目的勒索软件详解编程语言
- onbeforeunload方法和onunload方法的使用实例详解编程语言
- ActiveMQ之点对点使用详解编程语言
- Pinyin4j简单使用教程详解编程语言
- 基于注解的Spring AOP的配置和使用详解编程语言
- 学会如何下载和使用Linux ISO镜像(linuxiso镜像)
- MySQL函数详解,解析函数在数据库中的作用及使用方法(mysql中函数是什么)
- Oracle中序列的使用来实现自增长ID(oracle使用序列赋值)
- MySQLmysqldump命令使用详解
- 基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
- 基于Java回顾之I/O的使用详解
- 基于Java回顾之多线程同步的使用详解
- 基于C++cin、cin.get()、cin.getline()、getline()、gets()函数的使用详解
- 基于PHP选项与信息函数的使用详解
- 基于Silverlight打印的使用详解,是否为微软的Bug问题
- 基于.Net中的数字与日期格式化规则助记词的使用详解
- 基于AnDroidFrameLayout的使用详解
- PHP基于Yii框架中使用smarty模板的方法详解
- 基于PHPmagic_quotes_gpc的使用方法详解
- 基于php使用memcache存储session的详解