2

動作しているように見えるサイトで URL ルーティングを設定していますが、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 ファイルがロードされていません。これは私を狂わせています!

ヘンリー

4

2 に答える 2

2

IIS がこれらのファイルの処理を引き継ぎます。それらが IIS で提供されないように制限し、その場所へのルートを無視する必要があります。オプションとして、IIS -> Request Filtering -> Rules に移動し、新しいルールを追加してアクセスを制限します。ただし、これらのファイルの提供を制限すると、クライアントに対してスクリプトが実行されないことを認識していると思います。それが意図されている場合は、物理ファイルを Web サイトの外にあるアクセスできない場所に移動しないでください。 ?

于 2012-08-14T16:34:39.467 に答える
0

ResolveUrlこのような JavaScript ファイルを使用しないのはなぜですか?

<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

于 2012-08-14T16:44:11.447 に答える