2016-10-11 31 views
1

我試圖按照this指導並將文件存儲在一個子文件夾中。MVC:用http標頭提供文件

但是,OneSignal指南要求使用額外的HTTP標頭Service-Worker-Allowed: /來提供這些文件。我如何在Asp.Net MVC中做到這一點?

+0

顯示實際提供文件的代碼 – haim770

回答

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(); 
    } 
} 
+0

這不適用於我。嘗試使用下面的代碼,其中的文件位於Scripts/Custom/OneSignal目錄中: public ActionResult OneSignal(string id) this.Response.Headers.Add(「Service-Worker-Allowed」,「/」); return File(「〜/ Scripts/Custom/oneSignal /」+ id,System.Net.Mime.MediaTypeNames.Application.Octet,Path.GetFileName(「〜/ Scripts/Custom/oneSignal /」+ id)); } –

+0

我只是試過你的代碼: 'public ActionResult OneSignal(string id) { this.Response.Headers.Add(「Service-Worker-Allowed」,「/」); return File(「〜/ Scripts/Custom/oneSignal /」+ id,System.Net.Mime.MediaTypeNames.Application.Octet,Path.GetFileName(「〜/ Scripts/Custom/oneSignal /」+ id)); } 我把一個與「〜Scripts/Custom/oneSignal/1234」相對應的文件,並且我調用URL「.../OneSignal/1234」並且我得到文件(並且響應頭文件已存在)。 你能確切地說明什麼不起作用嗎? – Arcord

+0

是的,所以我只需定義內容類型並返回內容而不是文件以供下載。 –