WPF中的URI使用详解

需积分: 15 9 下载量 160 浏览量 更新于2024-08-05 收藏 50.74MB PDF 举报
"URI语法-ogg 官方文档" 在IT领域,URI(Uniform Resource Identifier)是一种标准的标识和定位互联网上资源的方式。它由多个组件构成,这些组件共同定义了一个资源的位置和访问方法。根据标题和描述,我们将深入探讨URI的基本结构以及在WPF(Windows Presentation Foundation)中的应用。 一个标准的URI通常包括以下三个主要部分: 1. **协议(Protocol)**:这定义了访问资源的方法或服务类型,如HTTP(超文本传输协议)、HTTPS(安全的HTTP)、FTP(文件传输协议)等。在例子`http://www.cnblogs.com/helloj2ee/`中,协议是HTTP,意味着资源通过HTTP协议进行传输。 2. **主机(Host)**:这部分包含了资源所在的服务器的IP地址或域名,有时也会包含端口号。在示例中,主机是`www.cnblogs.com`,没有指定端口,通常HTTP的默认端口是80。 3. **路径(Path)**:路径部分指定了服务器上资源的具体位置,可以是目录或文件名。在`http://www.cnblogs.com/helloj2ee/`这个例子中,路径是`/helloj2ee/`,它可能是网站的一个子目录。 在WPF中,URI的应用非常广泛,包括但不限于以下几个方面: - **应用程序启动**:WPF允许使用URI来指定应用程序启动时要显示的用户界面。这通常在应用程序配置或XAML代码中完成。 - **加载图像**:开发者可以使用URI来引用和加载应用程序内部或外部的图像资源。 - **页面导航**:在构建具有多页面的WPF应用时,页面间的导航可以通过URI来实现,这在使用`Frame`或`NavigationWindow`等导航元素时尤其常见。 - **加载资源和内容**:WPF支持从各种位置(如当前程序集、引用的程序集或相对路径)加载资源和内容,这包括样式、模板、数据文件等。 - **Site of Origin文件**:Site of Origin是指那些不在应用程序包内,而是随应用程序一起部署的外部文件,它们也可以通过URI访问。 WPF提供了一套丰富的机制来处理和解析URI,使其能够适应不同的资源加载场景。例如,使用相对URI,开发者可以轻松地处理资源的相对位置,而绝对URI则用于访问固定的网络或本地位置。 对于想要学习WPF的开发者,特别是初学者,理解URI及其在WPF中的用法至关重要。这本《葵花宝典:WPF自学手册》详细介绍了WPF的基础和高级技术,包括XAML、依赖属性、路由事件和命令,以及如何有效地利用URI来管理应用程序的资源和交互。通过作者生动的叙述方式,读者可以在轻松愉快的氛围中掌握WPF开发。 学习WPF的过程中,读者将逐步了解如何创建应用程序窗口、实现页面导航、布局管理,以及使用控件、样式、数据绑定、二维图形和动画等特性。这些知识将帮助开发者提升技能,实现更复杂的桌面应用开发。书中强调了实践经验,非常适合没有任何WPF背景的新手入门。 URI在WPF中扮演着至关重要的角色,它是连接应用与资源的桥梁,无论是简单的图片加载还是复杂的页面导航,都离不开URI的正确使用。对于希望在WPF领域深入学习的开发者,理解和掌握URI的使用是必不可少的第一步。

suricata中void DetectHttpUriRegister (void) { /* http_uri content modifier / sigmatch_table[DETECT_AL_HTTP_URI].name = "http_uri"; sigmatch_table[DETECT_AL_HTTP_URI].desc = "content modifier to match specifically and only on the HTTP uri-buffer"; sigmatch_table[DETECT_AL_HTTP_URI].url = "/rules/http-keywords.html#http-uri-and-http-uri-raw"; sigmatch_table[DETECT_AL_HTTP_URI].Setup = DetectHttpUriSetup; #ifdef UNITTESTS sigmatch_table[DETECT_AL_HTTP_URI].RegisterTests = DetectHttpUriRegisterTests; #endif sigmatch_table[DETECT_AL_HTTP_URI].flags |= SIGMATCH_NOOPT|SIGMATCH_INFO_CONTENT_MODIFIER; sigmatch_table[DETECT_AL_HTTP_URI].alternative = DETECT_HTTP_URI; / http.uri sticky buffer / sigmatch_table[DETECT_HTTP_URI].name = "http.uri"; sigmatch_table[DETECT_HTTP_URI].alias = "http.uri.normalized"; sigmatch_table[DETECT_HTTP_URI].desc = "sticky buffer to match specifically and only on the normalized HTTP URI buffer"; sigmatch_table[DETECT_HTTP_URI].url = "/rules/http-keywords.html#http-uri-and-http-uri-raw"; sigmatch_table[DETECT_HTTP_URI].Setup = DetectHttpUriSetupSticky; sigmatch_table[DETECT_HTTP_URI].flags |= SIGMATCH_NOOPT|SIGMATCH_INFO_STICKY_BUFFER; DetectAppLayerInspectEngineRegister2("http_uri", ALPROTO_HTTP1, SIG_FLAG_TOSERVER, HTP_REQUEST_LINE, DetectEngineInspectBufferGeneric, GetData); DetectAppLayerMpmRegister2("http_uri", SIG_FLAG_TOSERVER, 2, PrefilterGenericMpmRegister, GetData, ALPROTO_HTTP1, HTP_REQUEST_LINE); DetectAppLayerInspectEngineRegister2("http_uri", ALPROTO_HTTP2, SIG_FLAG_TOSERVER, HTTP2StateDataClient, DetectEngineInspectBufferGeneric, GetData2); DetectAppLayerMpmRegister2("http_uri", SIG_FLAG_TOSERVER, 2, PrefilterGenericMpmRegister, GetData2, ALPROTO_HTTP2, HTTP2StateDataClient); DetectBufferTypeSetDescriptionByName("http_uri", "http request uri"); DetectBufferTypeRegisterSetupCallback("http_uri", DetectHttpUriSetupCallback); DetectBufferTypeRegisterValidateCallback("http_uri", DetectHttpUriValidateCallback); g_http_uri_buffer_id = DetectBufferTypeGetByName("http_uri"); 每一句都加上详细的注释

2023-05-25 上传