我有一个包含两个项目的解决方案。便携式区域项目,以及引用便携式区域项目的网站,以及两者都引用MvcContrib。
我遇到的问题是嵌入式资源,当我试图找到它们时,它们给我一个404错误。它似乎正在尝试访问物理路径而不是dll。局部视图工作正常。
我正在尝试访问的文件在我的visual studio解决方案资源管理器中看起来像这样
AdHocReporting / Areas / AdHocReportBuilder / Content / adhoc.css(嵌入构建操作)
以下是便携式区域的路由:
using System.Web.Mvc;
using MvcContrib.PortableAreas;
namespace AdHocReporting.Areas.AdHocReportBuilder
{
public class AdHocReportBuilderAreaRegistration : PortableAreaRegistration
{
public override string AreaName
{
get { return "AdHocReportBuilder"; }
}
public override void RegisterArea(AreaRegistrationContext context, IApplicationBus bus)
{
RegisterRoutes(context);
RegisterAreaEmbeddedResources();
}
private void RegisterRoutes(AreaRegistrationContext context)
{
context.MapRoute(
AreaName + "_content",
base.AreaRoutePrefix + "/Content/{resourceName}",
new { controller = "EmbeddedResource", action = "Index", resourcePath = "Content" },
new[] { "MvcContrib.PortableAreas" }
);
context.MapRoute(
AreaName + "_default",
base.AreaRoutePrefix + "/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
}
以下是可移动区域引用的网站Global.aspx
namespace AdHocReportingSite
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
PortableAreaRegistration.RegisterEmbeddedViewEngine();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
}
这是我的解决方案探索的图像:
答案 0 :(得分:0)
创建新项目并重新编写所有内容后,无法重现该问题。我不确定这是不是错误,或者我错过了设置便携式区域的一个步骤。
答案 1 :(得分:0)
在每个文件类型的Web.Config中添加:
<system.webServer>
<handlers>
<add name="js" path="*.js" verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="File" preCondition="integratedMode" />
</handlers>
</system.webServer>
这将使IIS尝试使用已定义的路由,而不是搜索静态文件。