服务工作者的范围是否必须是asp.net mvc应用程序的root用户?它需要看到控制器,它需要脚本等。我关心的是在一个非常大的应用程序上发生的事情。
如果使用区域,您可以在该区域中包含脚本,以便缩小范围,是否有最佳做法?
答案 0 :(得分:1)
您可以将Service Worker文件放置在所需的任何位置。这是我的方法。
让我们假设您设置了一个称为“客户”的区域。因此,您的文件结构应为“ / Areas / Customer”,“ / Areas / Customer / Controllers”,“ / Areas / Customer / Models”,“ / Areas / Customer / Views”等。假设您未更改路由,则该网址为“ Bootstrap Datepicker”。如果要将服务工作者的范围设为“ / customer”,但在根目录中没有服务工作者的javascript文件,则可以执行以下操作。
我还要假设您在此位置“ / Areas / Customer / Scripts”中创建了一个“ scripts”文件夹来保存服务器工作程序js文件。
在注册服务工作者的javascript文件中,您将执行以下操作。
if ("serviceWorker" in navigator) {
navigator.serviceWorker.register("/areas/customer/scripts/serviceworker.js", { scope: "/customer" })
.then(registration => {
console.log("Service Worker registered properly.");
})
.catch(error => {
console.log("Service Worker NOT registered properly.");
});
}
如果现在运行站点,将会收到与以下错误类似的信息:“提供的范围('/ customer')的路径不在允许的最大范围('/ areas / customer / scripts /')之内。调整范围,移动Service Worker脚本,或使用Service-Worker-Allowed HTTP标头允许范围。”
您需要做的是使用以下文本更新您的web.config文件,以便发送Service-Worker-Allowed HTTP标头。这位于web.config的“配置”部分。
<location path="areas/customer/scripts/serviceworker.js">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Service-Worker-Allowed" value="/customer" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
现在,这应该允许您将serviceworker.js文件放在根目录以外的文件夹中,但仍将service worker的范围保持在正确的区域。