gpt4 book ai didi

azure - 通过 Web API 提供静态内容

转载 作者:行者123 更新时间:2023-12-03 02:16:44 26 4
gpt4 key购买 nike

我当前正在使用在 OWIN/Katana(在 Windows Azure 辅助角色实例上)上运行的 WebAPI。客户端(使用 HTML、CSS 和 Javascript 构建主页)通过 REST 接口(interface)与 WebAPI 交互。

静态/客户端相关文件(例如 HTML、CSS、Javascript、图像等)将保存在 Windows Azure Blob 存储上。

我现在想通过 WebAPI/OWIN 提供此静态内容。

第一个解决方案是从 blob 存储加载文件,并将路由映射到 Controller ,该 Controller 以 HttpResponse 形式返回该文件的 blob 内容(请参阅 here )

这仅适用于一个文件,但我的 index.html 包含其他 CSS 和 Javascript 文件。因此,浏览器开始查找 @ http://[OWIN-Web-Server-URL]/anotherJSfile.js ,当然什么也找不到,因为没有为此定义路由。我不能/不想为每个文件定义一个路由,因为客户端应该从 Blob 存储获取文件,而不需要通过 Web 服务器走任何弯路(1-2 个索引/起始文件是可以接受的,但所有内容都可以)否则应通过 blob 存储提供服务)。

第二次尝试是使用一些提供“静态内容”功能的外部库,但它们都不起作用并且处于 alpha 状态(请参阅 herehere ) .

第三种不太可接受的解决方案是从 http://[OWIN-Web-Server-URL]/ 重定向到 index.html blob 存储上的 文件。这样它可能会起作用,但 URL 总是类似于 https://xxx.blob.core.windows.net/jsscripts/index.html ,这不是更好的选择,因为如果 blob 存储名称 (xxx) 会更改,该网站的每个链接也会中断。

我的问题是:

目前是否有通过 Web API/OWIN 提供静态文件的解决方案?或者即将发布的 Web API 2 版本中有任何解决方案吗?

最佳答案

解决方案,对我有用:

根据我的第一个解决方案,我通过 Web API Controller 提供 index.htmlbootstrapper.js 文件。

index.html 文件将从 Blob 存储加载,在服务器上格式化(获取存储帐户端点 url: https://xxx.blob.core.windows.net/ )并通过 HttpResponse 返回(mediatype :文本/html)。 bootstrapper.js 将通过 HttpResponse(媒体类型:application/javascript)加载并返回。

index.html 文件现在使用剩余静态内容的正确源 URL 调用 bootstrapper.js 文件。剩余的内容将从给定的源 URL 相对加载。

在我们的生产系统中,源URL指向blob存储,在开发环境中,URL指向本地Web服务器。这是必需的,因为由 Web 服务器提供服务的 HTML 文件无法访问文件系统上的文件。因此需要一个网络服务器(我们使用WebStorm中内置的网络服务器)来提供这些文件。

index.html 文件:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>Main Page</title>
<script type="text/javascript" src="bootstrap-app.js"></script>
<script type="text/javascript">bootstrapApp('{0}');</script>
</head>
<body></body>
</html>

bootstrapper.js 文件:

/**
* Loads all needed files asynchronously into the html file
*/
window.bootstrapApp = function(baseUrl) {
"use strict";
var i, assetUrls;

window.baseUrl = baseUrl;

assetUrls = [ 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/2.36.0/codemirror.min.css',
'https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js',
'https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.0.6/jquery.mousewheel.min.js',
'https://cdnjs.cloudflare.com/ajax/libs/codemirror/2.36.0/codemirror.min.js',
baseUrl + '../lib/xxx.js',
baseUrl + '../lib/xxx/xxx.js',
baseUrl + 'resources/xxx.css',
baseUrl + 'xxx.js'
];

function endsWidth(string, suffix) {
return (string.indexOf(suffix, string.length - suffix.length) !== -1);
}

// Load all assets from the previously defined array asynchronously in the order they are given in the array
for (i = 0; i < assetUrls.length; i++) {
// Load css or js asset
if (endsWidth(assetUrls[i], 'css')) {
document.write('<link rel="stylesheet" type="text/css" href="' + assetUrls[i] + '" />');
} else if (endsWidth(assetUrls[i], 'js')) {
document.write('<script type="text/javascript" src="' + assetUrls[i] + '"></script>');
}
}
};

关于azure - 通过 Web API 提供静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18869848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com