我正在尝试提供嵌入到DLL中的一些JS和CSS文件,并在此基于此方法提供解决方案:http://weblogs.asp.net/imranbaloch/asp-net-bundling-and-minification-and-embedded-resources
所以,嵌入了javascript和css文件,我为它们创建了包。 我的问题开始是因为,有很多这样的问题,我需要一些文件夹结构来保持秩序。所以原来的路线
RouteTable.Routes.Insert(0,
new Route("Embedded/{file}.{extension}",
new RouteValueDictionary(new { }),
new RouteValueDictionary(new { extension = "css|js" }),
new EmbeddedResourceRouteHandler()
));
还不够,所以我把它改成了这个:
RouteTable.Routes.Insert(0,
new Route("Embedded/{*url}",
new RouteValueDictionary(new { }),
new EmbeddedResourceRouteHandler()
));
我也不能使用扩展部分,因为catch-all部分必须是最后一部分 所以现在如果我尝试访问任何看起来像文件的东西,我的路线将永远不会被使用所以我只会得到一个404
我尝试用斜线替换点或在末尾添加斜杠,但我在此之后是一个简单的解决方案,它允许我将看起来像文件的网址映射到实际文件。
我也在网上搜索过,似乎有基于UrlRewrite或改变web.config的解决方案,但是: - 我不想为每个应用程序修改IIS设置以容纳库 - 因为它是一个库,我希望它是自包含的,使用它的开发人员不应该关心这些内部问题
那么,我可以在我的库中实现一个解决方案吗?
另外值得一提的是原始路由具有相同的问题,它只能用于
<modules runAllManagedModulesForAllRequests="true" />
web.config中的,我认为这不是一个好主意
答案 0 :(得分:1)
设置
时 <modules runAllManagedModulesForAllRequests="true" />
这使得所有可用模块都可以针对请求运行。正如您所提到的,这对性能来说并不是最好的。但是,您只能添加实际需要的模块 - 在这种情况下是UrlRoutingModule。
您可以像这样添加此模块:
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
</system.webServer>
如果您想要更好的方法(IMO),请忽略WebConfig并将其添加到类库中的AppStart.cs文件中。
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(AppStart), "PreStart")]
[assembly: WebActivatorEx.PostApplicationStartMethod(typeof(AppStart), "Start")]
namespace EmbeddedPages
{
public static class AppStart
{
private static bool PreStartFired = false;
public static void PreStart()
{
if (!PreStartFired)
{
PreStartFired = true;
DynamicModuleUtility.RegisterModule(typeof(UrlRoutingModule));
}
}
}
}
这会将UrlRoutingModule添加到模块堆栈中,您的网址现在应该正确解析。注意:您需要通过nuget将WebActivator添加到项目中。