我正在尝试关注this指南并将文件存储在子文件夹中。
但是,OneSignal指南要求使用其他HTTP标头Service-Worker-Allowed: /
来提供这些文件。我如何在Asp.Net MVC中做到这一点?
答案 0 :(得分:2)
您可以在控制器的操作中使用:
this.Response.Headers.Add("Service-Worker-Allowed","/");
希望这个帮助: - )
编辑: 更好的方法是创建一个动作过滤器来自动添加此标题:
public class WorkerAllowedAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Headers.Add("Service-Worker-Allowed", "/");
base.OnActionExecuted(filterContext);
}
}
你可以把它放在你的行动(或你的控制者)上:
public partial class HomeController
{
[WorkerAllowed]
public ActionResult Index()
{
return View();
}
}
答案 1 :(得分:0)
无论我尝试了什么,即使我在响应头中看到了作用域,也无法获得允许的作用域。我根据本文找到了一种解决方案:https://weblog.west-wind.com/posts/2015/Nov/13/Serving-URLs-with-File-Extensions-in-an-ASPNET-MVC-Application
基本上,我们使Service Worker js文件看起来像“存在”在根目录中,以避免出现范围问题。您可以将Service Worker js文件保留在所需的任何目录中(可能是/ Scripts)。然后,您可以在web.config(或IIS)中设置IIS重写规则,以将包含服务工作者文件名的任何请求重新路由到操作(请确保指定操作的确切路径)。然后该操作将文件返回为javascript / application类型。
<system.webServer>
<rewrite>
<rules>
<rule name="Service worker fix">
<match url="pwa-sw.js"/>
<action type="Rewrite" url="/home/serviceworker"/>
</rule>
</rules>
</rewrite>
</system.webServer>
然后是控制器
[AllowAnonymous]
[Route("serviceworker")]
public ActionResult serviceworker()
{
return File("/Scripts/pwa-sw.js", "application/javascript");
}