我在一个似乎正在运行的网站上设置网址路由,但我无法让它忽略我的javascript文件。我使用ASP.NET开发服务器和IIS 7时遇到同样的问题。我没有使用mvc。
我已尝试以下各项忽略javascript但没有成功
routes.Add(new Route("Scripts/", new StopRoutingHandler()));
routes.Add(new Route("Scripts/{*pathInfo}", new StopRoutingHandler()));
routes.Add(new Route("{resource}.js", new StopRoutingHandler()));
routes.Add(new Route("{resource}.js/{*pathInfo}", new StopRoutingHandler()));
routes.Add(new Route("*.js", new StopRoutingHandler()));
routes.Ignore("Scripts/{*pathInfo}");
routes.Ignore("{file}.js");
routes.Ignore("{resource}.js/{*pathInfo}");
routes.Ignore("Scripts/{*pathInfo}");
routes.Ignore("{folder}/{*pathInfo}", new { folder = "Scripts" });
routes.Ignore("{*alljs}", new { alljs = @".*\.js(/.*)?" });
RouteTable.Routes.Ignore("{resource}.js/{*pathInfo}");
RouteTable.Routes.RouteExistingFiles = false;
以下是我为隔离问题而创建的基本测试页
Global.asax包含
void Application_Start(object sender, EventArgs e) {
RegisterRoutes(RouteTable.Routes);
}
void RegisterRoutes(RouteCollection routes){
routes.Ignore("{*alljs}", new { alljs = @".*\.js(/.*)?" });
routes.MapPageRoute("testpage", "testpage", "~/testpage.aspx");
routes.MapPageRoute("area", "testpage/area/{name}", "~/testpage.aspx");
}
testpage.aspx: -
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testpage.aspx.cs" Inherits="testpage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Test.aspx</title>
<script type="text/javascript" src="./Scripts/test.js"></script>
</head>
<body>
<form id="form1" runat="server">
<p id="jsLoaded">false</p>
</form>
</body>
</html>
testpage.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class testpage : System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e)
{
if (Page.RouteData.Values.ContainsKey("name")) { Response.Write(Page.RouteData.Values["name"].ToString()); }
}
}
test.js
window.onload = function () {
if (document.getElementById('jsLoaded')) {
document.getElementById('jsLoaded').innerHTML = 'test.js loaded';
}
}
导航到site / testpage / area / areaname显示路由正常,但未加载javascript文件。这让我疯了!
亨利
答案 0 :(得分:2)
IIS正在接管这些文件。您必须限制它们在IIS中提供并忽略到该位置的任何路由。一个选项是转到IIS - &gt;请求过滤 - &gt;规则并添加新规则以限制访问。但我确定你知道,如果你限制这些文件被提供,那么脚本将永远不会为客户端运行,如果发生这种情况,为什么不将网站外的物理文件移动到一个无法访问的位置?
答案 1 :(得分:0)
为什么不对这样的javascript文件ResolveUrl
?
<script type='text/javascript' src='<%= ResolveUrl("~/Scripts/test.js") %>'></script>
你也尝试过,
RouteTable.Routes.IgnoreRoute("{*alljs}", new {alljs=@".*\.js(/.*)?"});
参考:http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx