MVC:使用http标头

时间:2016-10-11 07:11:49

标签: asp.net asp.net-mvc http-headers onesignal

我正在尝试关注this指南并将文件存储在子文件夹中。

但是,OneSignal指南要求使用其他HTTP标头Service-Worker-Allowed: /来提供这些文件。我如何在Asp.Net MVC中做到这一点?

2 个答案:

答案 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");
    }