asp.net-mvc - 捕获对内容文件夹中文件的请求以通过 Controller 操作进行处理

标签 asp.net-mvc

我有一个必须使用的第三方小部件库。该库有一个硬编码到文件的字符串。是否可以通过路由拦截此请求?我的尝试如下:

routes.MapRoute(name: "ribbonbar",
                url: "Content/Ribbon/Scripts/Ribbon.Tabs.foo",
                defaults: new { controller = "Ribbon", action = "Index" });

但我只得到了 404。这是不可能的还是我混淆了一些东西?

最佳答案

是的,这是可能的。您需要将以下处理程序添加到您的 web.config 以确保此请求通过托管管道和您的路由:

<system.webServer>
    <handlers>
        ...
        <add 
            name="MyCustomhandler" 
            path="Content/Ribbon/Scripts/Ribbon.Tabs.foo" 
            verb="GET" 
            type="System.Web.Handlers.TransferRequestHandler" 
            preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

然后您可以使用以下 Controller 操作来处理此请求:

public class RibbonController
{
    // GET Content/Ribbon/Scripts/Ribbon.Tabs.foo
    public ActionResult Index()
    {
        var file = Server.MapPath("~/App_Data/foo.bar");
        return File(file, "application/foo-bar");
    }
}

您还可以从同一 Controller 操作向 Content/Ribbon/Scripts/* 提供所有请求:

<system.webServer>
    <handlers>
        ...
        <add 
            name="MyCustomhandler" 
            path="Content/Ribbon/Scripts/*" 
            verb="GET" 
            type="System.Web.Handlers.TransferRequestHandler" 
            preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

和这样的路线:

routes.MapRoute(
    name: "ribbonbar",
    url: "Content/Ribbon/Scripts/{name}",
    defaults: new { controller = "Ribbon", action = "Index" }
);

像这样的 Action :

public class RibbonController
{
    // GET Content/Ribbon/Scripts/*
    public ActionResult Index(string name)
    {
        ...
    }
}

除了使用特定的处理程序,您还可以为所有请求启用托管模块,如下所示:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    ...
</system.webServer>

但我不建议您启用此选项,因为现在所有请求都将通过托管管道,即使是来自静态资源的请求,这可能会对应用程序的性能产生负面影响。最好只对选定的网址有选择地启用此功能。

关于asp.net-mvc - 捕获对内容文件夹中文件的请求以通过 Controller 操作进行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15732073/

相关文章:

c# - ASP.NET MVC : Why Range Data Annotation is not working on checkbox in client side?

c# - 如何使用 StructureMap 将不同的依赖项注入(inject) WebApi Controller

asp.net-mvc - Entity Framework 以及代码优先场景中的成员资格

c# - Razor 中的 DisplayFor 具有可为空的小数更改格式

c# - Entity Framework 可选的一对一关系不起作用

c# - ASP.net MVC - 文本框值保留已发布的值

java - 无法在 ASP.NET MVC 应用程序中使用 Java 小程序

c# - OAuthForbiddenException : You are not a sandbox user of this client - Instagram login in ASP. NET MVC

asp.net-mvc - ASP.NET MVC ajax 的东西是否需要 Microsoft.ajax.js?

c# - ASP.NET MVC 中的面向方面编程