在glimpse中显示文件下载

时间:2014-02-14 20:35:34

标签: asp.net-mvc glimpse

我在控制器中有一个动作,它返回一个要下载的文件,但这个动作并没有显示在Glimpse的历史记录中。

有没有办法让它出现?

这是代码:

   public ActionResult DownloadCv(string fileName)
        {


            string filepath = string.Format("{0}/{1}", _appSettings.CvsDirectory, fileName);
            const string contentType = "application/msword";

            return File(filepath, contentType, fileName);
        }

2 个答案:

答案 0 :(得分:2)

它当前未显示的原因是默认情况下content type policy所在的原因。如果您查看以下documentation,您会看到内容类型部分,其中介绍了需要完成的工作:

<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
    <runtimePolicies>
      <contentTypes>
        <add contentType="application/msword"/> 
      </contentTypes>
    </runtimePolicies>
</glimpse>

您可能遇到的问题是,通过内容类型策略的实现方式,它会返回RuntimePolicy.On。这意味着一瞥客户端将尝试嵌入结果中。你真正想要的是RuntimePolicy.PersistResults。因此,将上述contentType添加到runtimePolicies部分后。我也会创建以下内容并将其放入您的项目中,Glimpse应该接下来。

public class MsWordContentTypePolicy : IRuntimePolicy 
{  
    public RuntimeEvent ExecuteOn
    {
        get { return RuntimeEvent.EndRequest; }
    }

    public RuntimePolicy Execute(IRuntimePolicyContext policyContext)
    { 
        var contentType = policyContext.RequestMetadata.ResponseContentType.ToLowerInvariant();

        return contentType == "application/msword" ? RuntimePolicy.PersistResults : RuntimePolicy.On; 
    }
}

答案 1 :(得分:0)

此后已将其纳入Glimpse,您只需使用:

<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
   <runtimePolicies>
     <contentTypes>
       <add contentType="application/msword" runtimePolicy="PersistResults" />
    </contentTypes>
  </runtimePolicies>    
</glimpse>