小编Luk*_*ins的帖子

Asp.net Web API - 如何设置自定义CSV媒体类型格式化程序的文件名

我已经在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)

.net asp.net-web-api

11
推荐指数
2
解决办法
5450
查看次数

Asp.Net Web Api - 为IEnumerable <T>返回404返回null

我正在使用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)

c# asp.net asp.net-web-api

11
推荐指数
2
解决办法
1万
查看次数

标签 统计

asp.net-web-api ×2

.net ×1

asp.net ×1

c# ×1