在我的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之外,一切都工作正常,因此用户可能每次都需要在另存为对话框时键入他/她自己的文件名.有没有办法在上面的代码中设置默认文件名?
我有一个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传入方法中读取它,我能够在测试版中完成它,但是已经删除了.