相关疑难解决方法(0)

如何在ASP.NET Web API中设置下载文件名

在我的ApiController类中,我有以下方法来下载服务器创建的文件.

public HttpResponseMessage Get(int id)
{
    try
    {
        string dir = HttpContext.Current.Server.MapPath("~"); //location of the template file
        Stream file = new MemoryStream();
        Stream result = _service.GetMyForm(id, dir, file);
        if (result == null)
        {
            return Request.CreateResponse(HttpStatusCode.NotFound);
        }
        result.Position = 0;
        HttpResponseMessage response = new HttpResponseMessage();
        response.StatusCode = HttpStatusCode.OK;
        response.Content = new StreamContent(result);
        return response;
    }
    catch (IOException)
    {
        return Request.CreateResponse(HttpStatusCode.InternalServerError);
    }
}
Run Code Online (Sandbox Code Playgroud)

除了默认下载文件名是其id之外,一切都工作正常,因此用户可能每次都需要在另存为对话框时键入他/她自己的文件名.有没有办法在上面的代码中设置默认文件名?

c# asp.net-web-api

136
推荐指数
4
解决办法
10万
查看次数

如何在SetDefaultContentHeaders中访问底层对象?

我有一个web api,我返回一个对象.当我使用接受标题"image/jpg"时,我想要该对象的图像表示,但我想根据我正在返回的对象设置文件名.我已经实现了一个BufferedMediaTypeFormatter并且认为我应该在这样的方法中执行此操作SetDefaultContentHeaders:

public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
{
    base.SetDefaultContentHeaders(type, headers, mediaType);
    var myObject = // How do I get this from the response?
    var contentDispositionHeader = new ContentDispositionHeaderValue("attachment") 
        { FileName = myObject.FileName };
    headers.ContentDisposition = contentDispositionHeader;
}
Run Code Online (Sandbox Code Playgroud)

所以问题是当我进入时,我如何获得底层对象SetDefaultContentHeaders?通过从HttpResponseMessage传入方法中读取它,我能够在测试版中完成它,但是已经删除了.

asp.net-web-api

3
推荐指数
1
解决办法
761
查看次数

标签 统计

asp.net-web-api ×2

c# ×1