Asp.Net MVC中的服务工作者,范围

时间:2018-02-28 15:51:33

标签: asp.net-mvc service-worker

服务工作者的范围是否必须是asp.net mvc应用程序的root用户?它需要看到控制器,它需要脚本等。我关心的是在一个非常大的应用程序上发生的事情。

如果使用区域,您可以在该区域中包含脚本,以便缩小范围,是否有最佳做法?

1 个答案:

答案 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的范围保持在正确的区域。