Wie kann ich eine Umleitung zu einem anderen Action/Controller MVC3-aus einer VOID-Methode?
Habe ich eine controller-Methode, die einen void zurückgibt, weil es baut einen Excel-Bericht für den Anwender zum herunterladen. Die Excel-3rd-party-Bibliothek, die wir verwenden, ist schreiben die Antwort selbst. Die Methode sieht wie folgt aus:
[HttpGet]
public void GetExcel(int id)
{
try
{
var report = _reportService.GetReport(id);
var table = _reportService.GetReportTable(id);
var excelReport = new ExcelReport(table, report.Name);
excelReport.DownloadReport(System.Web.HttpContext.Current.Response);
}
catch (Exception ex)
{
//This is wrong, of course, because I'm not returning an ActionResult
Response.RedirectToRoute("/Report/Error/", new { exceptionType = ex.GetType().Name });
}
}
Gibt es mehrere Sicherheits-checks, die exceptions werfen, wenn der Benutzer nicht erfüllen bestimmte Anmeldeinformationen für das abrufen der Bericht. Ich will redirect auf eine andere Seite und übergeben Sie einige Informationen über die Ausnahme, aber ich kann nicht herausfinden, wie dies zu tun in MVC3....
Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie tun, ein
Aber haben Sie getroffen, einen Blick auf die FilePathResult oder FileStreamResult ?
Anstatt zuzulassen, dass der 3. Teil der Bibliothek schreiben Sie die Antwort direkt erhalten, den Inhalt regelmäßig
ActionResult
und zurückFile(...)
für die eigentliche Datei oderRedirectToAction(...)
(oderRedirectToRoute(...)
) auf Fehler. Wenn Ihre 3rd-party-Bibliothek kann nur das schreiben, auf Antwort, die Sie verwenden müssen, um einige tricks zu capture es ist-Ausgang.Können Sie wieder eine EmptyActionResult:
Nicht sicher, ob es funktioniert, habe es noch nicht getestet.
Ein anderer Ansatz wäre, mit einer Ausnahme-filter: