- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个专门为其中一个 Web 应用程序设置的 WOPI 客户端和主机,当文件名正确且没有任何 URL 保留字符但当文件名包含 +、#、& 时,在线编辑器可以正常工作标志 WOPI 协议(protocol)路由将这些字符视为分隔符并提供 404 错误,因为该路由不适用于 GetFile、GetFileInfo 端点。
例子:
[Route("files/{fileName}/")]
[HttpGet]
public async Task<FileInfoBE> GetFileInfo(string fileName, string access_token)
{ //Logic here }
在上面的端点调用中,如果文件名包含加号 (+) 并且如果对该端点的调用是 URL 编码的,则加号将转换为 %2b,理想情况下它应该到达端点,但在调用之前由网络客户端制作,%2b 正在转换为 + 号并给出 404 错误。
注意:自定义编码没有帮助,因为 OWA 服务器与 WOPI 服务交互。
最佳答案
问题是路由属性参数不接受任何保留字符,甚至当它们是 URL 编码时:
这会起作用:
https://localhost:44349/files/?fileName=mydocument%2B%23%26.docx&access_token=test-token
[Route("files/")]
[HttpGet]
public async Task<string> GetFileInfo2(string fileName, string access_token)
{
return "Test";
}
这不会起作用:
https://localhost:44349/files/mydocument%2B%23%26.docx?access_token=test-token
[Route("files/{fileName}/")]
[HttpGet]
public async Task<string> GetFileInfo(string fileName, string access_token)
{
return "Test";
}
使用 WebClient 代理调用从 Javascript 前端到 C# 后端的完整示例:
Javascript:
let fileName = encodeURIComponent('mydocument+#&.docx');
fetch(`files?fileName=${fileName}&access_token=test-token`)
.then(function (response) {
return response.json();
})
.then(function (myJson) {
console.log(JSON.stringify(myJson));
});
C#:
[Route("files/")]
[HttpGet]
public async Task<string> GetFileInfo(string fileName, string access_token)
{
using (WebClient client = new WebClient())
{
var host = $"{HttpContext.Current.Request.Url.Scheme}://{HttpContext.Current.Request.Url.Host}:{HttpContext.Current.Request.Url.Port}";
var data = client.DownloadString($"{host}/proxy/files/?fileName={HttpUtility.UrlEncode(fileName)}&access_token={HttpUtility.UrlEncode(access_token)}");
return data;
}
}
[AllowAnonymous]
[Route("proxy/files/")]
[HttpGet]
public async Task<string> ProxyGetFileInfo(string fileName, string access_token)
{
return "MyValues";
}
为什么不允许使用这些字符以及为什么首先需要处理它:
URI 语法中不允许使用的排除的 US-ASCII 字符:
control = <US-ASCII coded characters 00-1F and 7F hexadecimal>
space = <US-ASCII coded character 20 hexadecimal>
delims = "<" | ">" | "#" | "%" | <">
字符“#”被排除在外,因为它用于将 URI 与片段标识符分隔开。百分号“%”被排除在外,因为它用于转义字符的编码。换句话说,“#”和“%”是必须在特定上下文中使用的保留字符。
不明智的字符列表是允许的,但可能会导致问题:
unwise = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`"
reserved 的字符在查询组件中和/或在 URI/URL 中具有特殊含义:
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
上面的“保留”语法类别指的是 URI 中允许使用的字符,但在通用 URI 语法的特定组件中可能不允许使用这些字符。 “保留”集中的字符并非在所有上下文中都保留。例如,主机名可以包含一个可选的用户名,因此它可以类似于 ftp://user@hostname/
,其中“@”字符具有特殊含义。
来源:
关于c# - 带有特殊字符的 WOPI 文件名无法在在线编辑器中打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55866064/
我们正在尝试按照协议(protocol)实现 Wopi 主机以与 OWA 集成,如 here 中所述,我们在某些方面遇到了一些问题: 我们实现了一个只能查看文件的简单主机,即它实现了 CheckFil
我想知道为什么我的 WOPI Host 没有被调用。我通过类似于以下内容的 HTML 页面启动我的主机: https://github.com/Microsoft/Office-Online-Test
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我们正在将 Office Online 与我们的应用程序集成以打开 Open Microsoft Office 文件(.docx、.xls、.pptx 等)。为此,我们使用 WOPI 协议(proto
有一个专门为其中一个 Web 应用程序设置的 WOPI 客户端和主机,当文件名正确且没有任何 URL 保留字符但当文件名包含 +、#、& 时,在线编辑器可以正常工作标志 WOPI 协议(protoco
我即将实现自己的 WOPI 主机,以便在 iOS 和 Android 上查看和编辑 Office 文档,但我想知道是否已经有任何现有的解决方案? 例如,我可以使用 SharePoint 或 OneDr
我目前正在使用 JAVA 和 JS 在我的项目中实现 WOPI。我的主机页面现在可以工作了。我使用了 https://github.com/ethendev/wopihost 中的代码。 但现在我面临
我想部署Office Online,需要实现WOPI协议(protocol)。我已经看到了 C# 中 WOPI 主机的实现,例如here 。 WOPI 协议(protocol)需要实现一堆端点。我想知
我正在研究 WOPI 集成,在对 stackoverflow 进行广泛研究后,我似乎找不到任何解决方法。 我在我的 API (.Net CORE 3.1) 中实现了两个端点。一个用于 CheckFil
根据文档,Office Online Server 2016 包含一个 WOPI 验证应用程序: http://wopi.readthedocs.io/en/latest/build_test_shi
根据文档,Office Online Server 2016 包含一个 WOPI 验证应用程序: http://wopi.readthedocs.io/en/latest/build_test_shi
如本文档所述 http://wopi.readthedocs.io/en/latest/discovery.html ,我想知道是否有办法动态使用 Action URL? 最佳答案 “动态”是什么意思
我已在 Office 365 云存储合作伙伴计划下使用 Microsoft Office Online 客户端成功实现了 JAVA WOPI Host 现在我想使用自定义 WOPI 客户端实现相同的流
我们有 Office Web Apps 和 WOPI,可以加载 powerpoint 文件并进行编辑。 但是,让 Word 编辑工作需要实现 Cobalt 或 FSSHTTP/FSSHTTPB 协议(
我正在实现 WOPI 服务器以尝试与 Office Online 集成。当 WOPI 客户端调用 PutFile 方法(保存文件)时,它发送一个空请求(req.body.length === 0)。这
我们的一位客户希望我们使用 Office Server 打开 Word 文档。我已经在本地安装了 WAC 服务器,以便在浏览器中打开办公文档。 此文档将在我们系统的 iframe 中打开。我想使用 W
我们正在尝试实现 WOPI 主机,而不对我们的 Office Web Apps 服务器使用 CobaltCore dll。 (在 Java 中实现)。我发现的所有信息都表明您必须实现 MS-FSSHT
我正在尝试在 ASP.NET MVC 应用程序中获取 Wopi 主机实现。 使用这个项目 https://code.msdn.microsoft.com/office/Building-an-Offi
我正在做一个项目,我们已经用 word 实现了内容管理。 我们有一些使用 OpenXML 处理的 word 文件。 用户可以通过两种方式打开这些文件——下载副本或在线编辑。在线编辑使用 Office
我是一名优秀的程序员,十分优秀!