ชุดบันเดิล ASP.NET MVC Framework 4.5 CSS ไม่ทำงานบนการโฮสต์


144

ฉันเรียกใช้แอพในแอพที่เขียนด้วย MVC4

มัดไฟล์ css ไม่ทำงาน ในเครื่องคอมพิวเตอร์ของฉันในโหมดดีบักฉันเห็นรหัสของแอพและเห็นไฟล์ แอปทำงานตามที่คาดไว้

<link href="/Content/css/home/basic-jquery-slider.css" rel="stylesheet"/>
<link href="/Content/css/home/Home.css" rel="stylesheet"/>

เมื่อฉันอัปโหลดแอปไปยัง Appharbor ฉันเห็นชุดรวมอยู่ในรหัส แต่แอพไม่ทำงาน

<link href="/Content/css/home?v=zhVOIpUNuvCOZhJyBcQWpMlozayor4te6k-pM29wHqI1" rel="stylesheet"/>

เมื่อฉันดูลิงค์ที่hrefฉันได้รับ403 - ต้องห้าม: การเข้าถึงถูกปฏิเสธ

วิธีแก้ปัญหานี้


ไม่แน่ใจว่าคุณแก้ไขปัญหานี้หรือไม่ แต่บทความนี้ได้รับการแก้ไขแล้ว stackoverflow.com/a/18474844/955831
Jason Foglia

คำตอบ:


284

ฉันเดาว่าเส้นทางนั้นContent/cssมีอยู่บนดิสก์ในแอปของคุณ ในกรณีนี้ IIS จะจัดการคำขอไม่ใช่ MVC

ตรวจสอบให้แน่ใจว่าเส้นทางเสมือนสำหรับบันเดิล (พารามิเตอร์ของตัวสร้าง StyleBundle) ไม่ตรงกับโฟลเดอร์ในระบบไฟล์

จากความคิดเห็นที่:

"ข้อตกลงที่ดีที่จะปฏิบัติตามเมื่อสร้างบันเดิลคือการรวม" บันเดิล "เป็นคำนำหน้าในชื่อบันเดิลซึ่งจะป้องกันความขัดแย้งในการจัดเส้นทางที่เป็นไปได้"


2
ขอบคุณ เป็นเรื่องปกติหรือไม่ที่ทำงานเมื่ออยู่ใน localhost?
Ricardo Polo Jaramillo

3
ขอบคุณสำหรับคำตอบนี้ - ทำให้ฉันกลัว!
Rich Turner

8
@RicardoPolo โดย "localhost" คุณหมายถึงในขณะที่รันบน iis express บนเครื่องพัฒนาของคุณหรือไม่ จากนั้นใช่เป็นเรื่องปกติที่จะทำงานที่นั่นเพราะคุณมักจะทำงานในโหมดแก้ไขข้อบกพร่องซึ่งจะเป็นการปิดการใช้งานการรวมกลุ่ม
bvgheluwe

1
ขอบคุณสิ่งนี้ทำให้ฉันเป็นบ้าในวันนี้
xingyu

11
+1 คำตอบนี้ช่วยฉันเข้าใจว่าเส้นทางเสมือนทำงานกับการรวมกลุ่มอย่างไร ฉันอ่านโพสต์ต้นฉบับบนmsdn ( asp.net/mvc/tutorials/mvc-4/bundling-and-minification ) แต่หลังจากแก้ปัญหาของฉันด้วยคำตอบของคุณฉันพบที่ท้ายข้อความเล็กน้อยพูดถึง virtual เส้นทาง: "การประชุมที่ดีที่จะปฏิบัติตามเมื่อสร้างบันเดิลคือการรวม" บันเดิล "เป็นคำนำหน้าในชื่อบันเดิลซึ่งจะป้องกันความขัดแย้งในการกำหนดเส้นทางที่เป็นไปได้" ฉันคิดว่าประโยคนี้ควรเป็นตัวหนาด้วยภาพเตือนสีแดง / เหลือง : D ขอบคุณ!
ซามูเอล

45

ปัญหานี้เป็นค่าเริ่มต้น. NET ไม่ได้ "ดำเนินการ" การร้องขอที่มีนามสกุล. js หรือ. css

มีการแก้ไขสองประการสำหรับสิ่งนี้ (คุณจะต้องทำเพียงหนึ่งข้อ)

A) ลบส่วนขยายออกจากชื่อมัด (แนะนำ) สิ่งนี้จะทำให้. NET ประมวลผลคำขอและรันผ่าน BundleModule

B) เพิ่มสิ่งนี้ไปยัง web.config ของคุณในส่วนsystem.webServerซึ่งจะทำให้. NET เรียกใช้. js และ. css ร้องขอผ่าน BundleModule

<modules runAllManagedModulesForAllRequests="true">
  <remove name="BundleModule" />
  <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</modules>

บิ๊กตะโกนออกไปหาเรย์โมโรผู้คิดหาสาเหตุที่แท้จริงและแบ่งปันกับฉันในบล็อกของฉัน: http://blog.cdeutsch.com/2012/11/fixing-404-errors-for-aspnet-mvc-apps.html


อัปเดตพร้อมข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่แท้จริงพร้อมกับตัวเลือกที่สอง
cdeutsch

1
ฉันมีปัญหานี้เพราะชื่อชุดของฉันเป็นชื่อเหมือนโฟลเดอร์ที่ลงท้ายด้วย "css" แม้ว่าบันเดิลของฉันจะไม่มีการขยายไฟล์ แต่ข้อเสนอแนะ A ก็ทำให้ฉันมีปัญหา
dsnunez

1
นี่ควรเป็นคำตอบที่ถูกต้องมันช่วยฉันด้วยปัญหาเดียวกัน
psulek

คำตอบที่ดีมันช่วยฉัน
DKR

สิ่งนี้กับส่วน <module> ที่หายไปจาก web.config oh man ...
XDS

19

เกิดขึ้นกับฉันเช่นกันเมื่อฉันพยายามปรับใช้แอป ASP.NET MVC ของฉันบน AppHarbor

ฉันมีชุดสไตล์ชีทพร้อมชื่อ

@Styles.Render("~/Content/bootstrap")

และโครงสร้างโฟลเดอร์คือ

-- เนื้อหา

- เนื้อหา \ Bootstrap \ ...

โดยเพียงแค่เปลี่ยนชื่อบันเดิลเป็น"~/Content/bootstrap-css"ปัญหาของฉันได้ถูก resovled


15

ฉันรู้ว่าฉันดึก 4 ปีสำหรับคำถามนี้ แต่มันใช้ได้กับฉัน

public static void RegisterBundles(BundleCollection bundles)
{
   ...

   BundleTable.EnableOptimizations = true;     // Added this           
}

2
จากคำตอบทั้งหมดด้านบนและด้านล่าง นี่เป็นคนเดียวที่ทำงานให้ฉัน
ฮาอิมแคทซ์

3
สิ่งนี้ช่วยให้การปรับให้เหมาะสมเมื่อคุณอยู่ในโหมดแก้ไขข้อบกพร่อง แม้ว่านี่จะเป็นวิธีที่ดีในการตรวจสอบว่าบันเดิลทำงานบนเครื่อง dev หรือไม่คุณไม่ควรทิ้งข้อความนี้ไว้ในรหัสของคุณ
Rudey

9

แก้ไขข้อผิดพลาด 403 แล้ว นี่คือคำอธิบายโดยละเอียดและวิธีแก้ปัญหาข้อผิดพลาด 403
วิธีแก้ปัญหา นั้นแสดงให้เห็นถึง CSS มัด อย่างไรก็ตามมันยังใช้กับ JavaScript

http://www.mvccentral.net/Story/Details/articles/kahanu/stylebundle-403-error-solved

สั้นตรวจสอบให้แน่ใจว่าเส้นทางเสมือน [Script | Style]Bundle("~/content/[script | css]")ไม่ตรงกับโฟลเดอร์ในระบบไฟล์ (เช่นC:\approot\Content\[script | css]) แทน[Script | Style]Bundle("~/content/[scriptDiff | cssDiff]")


2
ขอบคุณนี่เป็นปัญหาที่ฉันพบ เพื่อแก้ปัญหาใน BundleConfig.cs ฉันเปลี่ยนเส้นทางจาก @ Styles.Render ("~ / Content / css") เป็น @ Styles.Render ("~ / bundles / css") ตอนนี้มันทำงานได้เมื่อรันภายในเครื่องในโหมดดีบักและเมื่อเผยแพร่ในโหมด release หรือ debug
Ken Palmer

เป็นการตอบที่ดี แต่คุณไม่ควรทิ้งลิงค์ไว้เป็นอย่างน้อยขั้นตอนพื้นฐานของการเขียนบทความนี้จะดีมากหากมีที่นี่ในกรณีที่เว็บไซต์ที่ลิงค์นั้นหยุดทำงาน
Vitor M. Barbosa

5

ฉันแก้ไขปัญหาโดยการเพิ่มบรรทัดด้านล่างของรหัสที่คลาส BundleConfig

BundleTable.EnableOptimizations = false;

3

สิ่งที่ฉันทำง่ายมาก

ฉันเพิ่ม "js" ที่ส่วนท้ายของ ScriptBundle ดังนี้: ScriptBundle ใหม่ ("~ / bundles / appjs") และฉันเพิ่ม "css" ที่ส่วนท้ายของ StyleBundle เช่นนั้น: StyleBundle ใหม่ ("~ / content / appcss")

ชื่อโฟลเดอร์ของฉันไม่เคยลงท้ายด้วย "js" หรือ "css"

ที่ควรทำ


2

สิ่งนี้ใช้กับ 'ScriptBundle class' ด้วยตรวจสอบให้แน่ใจว่า 'ชื่อพารามิเตอร์' กับตัวสร้างไม่ตรงกับพา ธ ในระบบไฟล์ของเว็บแอปพลิเคชัน โปรดจำไว้ว่า IIS จะพยายามให้บริการไฟล์ / คำขอ


1

ปัญหาอาจมาจากไฟล์ที่เข้ารหัส สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันดาวน์โหลด BootStrap และใช้ไฟล์ที่ให้มา พวกเขาแสดงสีเขียวใน Windows explorer และทำงานได้ดีใน Visual Studio แต่เมื่อนำไปใช้งานฉันได้รับข้อผิดพลาด 403

คุณสามารถดูว่าพวกเขาจะถูกเข้ารหัสโดยไปที่คุณสมบัติแล้วคุณสมบัติขั้นสูงและมีช่องทำเครื่องหมายที่เข้ารหัส

ยกเลิกการเลือกและจะไม่มีปัญหาอีกต่อไป


0

ฉันมีปัญหาเดียวกันกับข้อผิดพลาด (403 ที่ต้องห้าม) ในกรณีของฉันเหตุผลคือพร็อกซีเซิร์ฟเวอร์ในองค์กรของฉันบล็อกไฟล์ css ของฉัน ชื่อไฟล์ css ตรงกับหนึ่งในกฎการบล็อก


0

ฉันพบไฟล์ bootstrap.css ไม่ได้อยู่ในโฟลเดอร์เนื้อหาดังนั้นฉันจึงค้นหามันในแพ็คเกจและวางที่นั่น .. มันใช้งานได้!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.