Как я могу перенаправить действие, которое не найдено в контроллере, в другое действие в том же контроллере?Допустим, файл abc.txt
запрашивается через http://localhost:5000/Link/GetFile/abc.txt
.Мой контроллер правильно обслуживает этот файл.Но теперь мне нужно обработать запрос, такой как http://localhost:5000/Link/Document/abc
.Конечно, нет никакого действия, соответствующего Document
, поэтому мне нужно вызвать функцию Error
в том же контроллере (включая идентификатор из исходного запроса).
Я пытался решить эту проблему с помощью функции StatusCodePagesWithReExecute
, нотогда мое File
действие не работает (каждый запрос идет непосредственно к функции Error).
У меня есть следующий контроллер:
public class LinkController : ControllerBase
{
public IActionResult GetFile(string id)
{
return DownloadFile(id);
}
public IActionResult Error(string id)
{
return File("~/index.html", "text/html");
}
private FileResult DownloadFile(string fileName)
{
IFileProvider provider = new PhysicalFileProvider(@mypath);
IFileInfo fileInfo = provider.GetFileInfo(fileName);
var readStream = fileInfo.CreateReadStream();
return File(readStream, "text/plain");
}
}
и конфигурация запуска:
app.UseDefaultFiles();
app.UseStaticFiles(new StaticFileOptions
{
ServeUnknownFileTypes = true,
DefaultContentType = "application/octet-stream",
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action}/{id?}"
);
});
Любые подсказки, как решить эту проблему?Привет