我已经在ASP.Net Web API项目中成功实现了Csv Media Type Formatter.我能够以Csv格式获得结果.但是,生成的文件名是没有扩展名的"部分".
理想情况下,我希望能够在控制器中设置此文件名,但能够全局添加扩展名是最小的.
以下是我找到的例子
覆盖OnGetResponseHeaders - 我不认为这是当前版本中的一个选项. http://forums.asp.net/t/1782973.aspx/1?Setting+response+and+content+headers+esp+ContentDisposition+inside+a+MediaTypeFormatter
根据那篇文章,这应该有效
public override IEnumerable<KeyValuePair<string, string>> OnGetResponseHeaders(Type objectType, string mediaType, HttpResponseMessage responseMessage)
{
return new[] { new KeyValuePair<string, string>("Content-Disposition", "attachment; filename=testing.csv") };
}
Run Code Online (Sandbox Code Playgroud)
但是Visual Studio说"没有合适的覆盖方法",并且在我将其添加到自定义Csv Formatter时不会编译.
从控制器返回HttpMessageResponse - 如何在ASP.NET Web API中设置下载文件名 但是这似乎只是推送现有的服务器文件,这将使Csv序列化无法进行.以下是尝试使此方法工作:
public HttpResponseMessage Get(string id)
{
var response = new HttpResponseMessage();
if (id == "test")
{
var data = GetTestData();
response.StatusCode = HttpStatusCode.OK;
response.Content = new StreamContent(data);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = "testorama.csv";
return response;
}
return …
Run Code Online (Sandbox Code Playgroud) 我正在使用Asp.Net Web Api的发行版创建API.如果没有找到结果,我试图传回正确的响应代码(404).
首先获取版本(抛出多个枚举错误):
public IEnumerable<MyObjectType> Get(int id, string format)
{
var db = new DbEntities();
var result = db.pr_ApiSelectMyObjectType(store, id, format).AsEnumerable();
if (result.Any())
{
return result;
}
var response = new HttpResponseMessage(HttpStatusCode.NotFound)
{ Content = new StringContent("Unable to find any results") };
throw new HttpResponseException(response);
}
Run Code Online (Sandbox Code Playgroud)
第二次获取版本(结果永远不为null,因此它总是返回200):
public IEnumerable<MyObject> Get(int id, string format)
{
var db = new DbEntities();
var result = db.pr_ApiSelectMyObjectType(store, id, format);
if (result == null)
{
var response = new HttpResponseMessage(HttpStatusCode.NoContent)
{ Content = new …
Run Code Online (Sandbox Code Playgroud)