У меня есть контроллер 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
?
Как я уже сказал в вопросе, действие должно вернуть строку. Я не могу вернуть Джона. Кроме того, в случае IE 9 файл загружается через iFrame. Но это не имеет значения. – ataravati
Я думаю, вы пропустили то, что он делает. Вы можете вернуть результат json с другим типом контента. Значение json result может быть возвращено как html, обычный текст и т. Д. Поэтому просто не сериализуйте его в json, если вы не хотите, чтобы он форматировался таким образом и указывал возвращаемый тип как text/plain. –
Также, поскольку вы не передаете что-либо в своем изменении метода в HttpGet, и вы не должны иметь никаких проблем в IE9. –