2015-07-24 2 views
0

У меня есть контроллер ASP App.net Web с действием Upload. Вот упрощенная версия Upload действия:Изменение типа содержимого ответа в asp.net Web API

[HttpPost] 
public async Task<string> Upload() 
{    
    if (!Request.Content.IsMimeMultipartContent()) 
     throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 

    var provider = new MultipartMemoryStreamProvider(); 
    await Request.Content.ReadAsMultipartAsync(provider); 
    var file = provider.Contents[0]; 

    try 
    { 
     // Save the file... 
    } 
    catch (Exception e) 
    { 
     return JsonConvert.SerializeObject(new 
     { 
      status = "error", 
      message = e.Message 
     }); 
    } 

    return JsonConvert.SerializeObject(new 
    { 
     status = "success" 
    }); 
} 

Возвращаемый тип действия должен быть строкой, так как он используется виджетом загрузки третьей стороны, которая принимает сериализации только JSON.

Проблема в том, что я использую это в IE 9, браузер не принимает application/json в качестве типа носителя. Итак, я должен удостовериться, что сервер возвращает plain/text. Как я могу это сделать без изменения возвращаемого типа действия на HttpResponseMessage?

ответ

1

Вы можете сделать что-то вроде этого:

public async Task<JsonResult> Upload() 
return Json(someData, "text/html"); 

Хотя другой вариант просто вернуть JSON это сообщение при том, что тогда плавающего фрейма не будет пытаться загрузить возвращающегося HTML.

+0

Как я уже сказал в вопросе, действие должно вернуть строку. Я не могу вернуть Джона. Кроме того, в случае IE 9 файл загружается через iFrame. Но это не имеет значения. – ataravati

+0

Я думаю, вы пропустили то, что он делает. Вы можете вернуть результат json с другим типом контента. Значение json result может быть возвращено как html, обычный текст и т. Д. Поэтому просто не сериализуйте его в json, если вы не хотите, чтобы он форматировался таким образом и указывал возвращаемый тип как text/plain. –

+0

Также, поскольку вы не передаете что-либо в своем изменении метода в HttpGet, и вы не должны иметь никаких проблем в IE9. –