هدایت درخواست فایلهای استاتیک در ASP.NET MVC به یک کنترلر
نویسنده: وحید نصیری
تاریخ: ۱۳۹۲/۰۴/۱۱ ۸:۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
<location path="Export">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>public static void RegisterRoutes(RouteCollection routes)
{
// ...
routes.RouteExistingFiles = true;
// ...
}using System.IO;
using System.Web.Mvc;
namespace Mvc4RouteExistingFiles.Controllers
{
public class ExportController : Controller
{
public ActionResult Index(string id)
{
if (string.IsNullOrWhiteSpace(id))
{
return Redirect("/");
}
var fileName= Path.GetFileName(id);
var path = Server.MapPath("~/export/"+ fileName);
return File(path, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
}
}http://localhost/export/test.pdf
using System.Web.Mvc;
using System.Web.Routing;
namespace Mvc4RouteExistingFiles
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.RouteExistingFiles = true;
routes.MapRoute(
name: "ExportRoute",
url: "Export/{id}",
defaults: new { controller = "Export", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("content/{*pathInfo}");
routes.IgnoreRoute("scripts/{*pathInfo}");
routes.IgnoreRoute("favicon.ico");
routes.IgnoreRoute("{resource}.ico");
routes.IgnoreRoute("{resource}.png");
routes.IgnoreRoute("{resource}.jpg");
routes.IgnoreRoute("{resource}.gif");
routes.IgnoreRoute("{resource}.txt");سلام و خسته نباشید
اکشن تعریف شده تنها برای مقدار Id اجرا خواهد شد اما در صورتی که فولدر Export ما شامل زیرشاخه باشد چه کار باید کرد
routes.MapRoute(
name: "ExportRoute",
url: "Export/{*id}",
defaults: new { controller = "Export", action = "Index", id = UrlParameter.Optional }
); routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" ); با وجود اضافه کردن routes.RouteExistingFiles = true; و تنظیم مسیردهی RouteConfig اما با صدا زدن http://localhost/export/test جواب میگیرم ولی با http://localhost/expor/test.jpg خطای 404 دریافت میکنم
دستورت IgnoreRoute مربوطه را هم اعمال کردم.
من از mvc5 استفاده میکنم ، مطلب فوق در این ورژن هم صادق است؟
routes.IgnoreRoute("export/{resource}.jpg"); من دنبال این کار هستم، چطوری میتونم آدرس تگ img رو به این صورت دربیارم، فایل css رو میتونم با باندل به این حالت دربیارم ولی تگ img رو نه!
public class AvatarController : Controller
{
public ActionResult Index(string id, int s, string d, string r)