จุดใน URL ทำให้ 404 ด้วย ASP.NET mvc และ IIS


303

ฉันมีโครงการที่ต้องใช้ URL ของฉันมีจุดอยู่ในเส้นทาง ตัวอย่างเช่นฉันอาจมี URL เช่น www.example.com/people/michael.phelps

URL ที่มีจุดจะสร้าง 404 การกำหนดเส้นทางของฉันไม่เป็นไร ถ้าฉันผ่านไปโดยไม่ใช้ michaelphelps ก็จะทำให้ทุกอย่างทำงานได้ หากฉันเพิ่มจุดฉันจะได้รับข้อผิดพลาด 404 ไซต์ตัวอย่างกำลังทำงานบน Windows 7 ด้วย IIS8 Express URLScan ไม่ทำงาน

ฉันพยายามเพิ่มสิ่งต่อไปนี้ใน web.config ของฉัน:

<security>
  <requestFiltering allowDoubleEscaping="true"/>
</security>

น่าเสียดายที่นั่นไม่ได้สร้างความแตกต่าง ฉันเพิ่งได้รับข้อผิดพลาด 404.0 ไม่พบ

นี่เป็นโครงการ MVC4 แต่ฉันไม่คิดว่าเกี่ยวข้อง การกำหนดเส้นทางของฉันทำงานได้ดีและพารามิเตอร์ที่ฉันคาดว่าจะมีจนกว่าพวกเขาจะรวมจุด

ฉันต้องกำหนดค่าอะไรเพื่อให้สามารถมีจุดใน URL ได้


93
ไม่อยากจะเชื่อเลยว่าฉันใช้เวลากับมันมาก URL ใช้งานได้ดีหากฉันเพิ่มเครื่องหมายสแลช ตัวอย่างเช่น www.example.com/people/michael.phelps/ อย่างไรก็ตามโดยไม่มีเครื่องหมายทับท้าย IIS จะทำให้เกิดข้อผิดพลาด 404
Mark

15
ทำเครื่องหมาย - นั่นเป็นเพราะไม่มีเครื่องหมายทับท้าย IIS คิดว่าเป็นไฟล์ที่ควรไปและค้นหา การเพิ่มเครื่องหมายสแลชมีผลต่อ ... นี่ไม่ใช่ไฟล์จริง นอกจากนี้ตัวเลือกการกำหนดค่าด้านล่างจะบอก IIS ว่าหากไม่ใช่ไฟล์ให้ลองกำหนดเส้นทางแทน
Tommy

ฉันมีปัญหาเดียวกันหลังจากฉันอัปเดตโครงการเป็น mvc 4 + asp.net 4.5
Tadeu Maia

เพื่อหลีกเลี่ยงปัญหาฉันใช้ IIS Rewrite เพื่อเพิ่มเครื่องหมายสแลชต่อท้าย URL ของฉัน
ทำเครื่องหมาย

4
มันไม่ได้ผลสำหรับฉัน URL ใช้งานได้ดีกับ "." ภายใน URL แต่เมื่อใกล้ถึงจุดสิ้นสุดจะมีข้อผิดพลาด
Arcadian

คำตอบ:


379

ฉันได้รับสิ่งนี้โดยการแก้ไขตัวจัดการ HTTP ของเว็บไซต์ของฉัน สำหรับความต้องการของฉันนี้ทำงานได้ดีและแก้ไขปัญหาของฉัน

ฉันเพิ่งเพิ่มตัวจัดการ HTTP ใหม่ที่มองหาเกณฑ์พา ธ ที่เฉพาะเจาะจง หากคำขอตรงกันจะถูกส่งไปยัง. NET อย่างถูกต้องเพื่อการประมวลผล ฉันมีความสุขมากกับการแก้ปัญหานี้ว่า URLRewrite แฮ็คหรือเปิดใช้งาน RAMMFAR

ตัวอย่างเช่นการให้. NET ประมวลผล URL www.example.com/people/michael.phelpsเพิ่มบรรทัดต่อไปนี้ลงใน web.config ของเว็บไซต์ของคุณภายในsystem.webServer / handlersองค์ประกอบ:

<add name="ApiURIs-ISAPI-Integrated-4.0"
     path="/people/*"
     verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
     type="System.Web.Handlers.TransferRequestHandler"
     preCondition="integratedMode,runtimeVersionv4.0" />

แก้ไข

มีข้อความที่บอกว่าวิธีการแก้ปัญหานี้จะมีหรือRAMMFAR RunAllManagedModulesForAllRequestsการเปิดใช้งานตัวเลือกนี้จะเปิดใช้งานโมดูลที่ได้รับการจัดการทั้งหมดสำหรับคำขอทั้งหมด นั่นหมายถึงไฟล์แบบคงที่เช่นรูปภาพ, PDF และทุกอย่างอื่นจะถูกประมวลผลโดย. NET เมื่อไม่จำเป็นต้องเป็น ตัวเลือกนี้เหมาะสมที่สุดหากคุณไม่มีกรณีเฉพาะ


3
นี่คือตัวอย่างที่สมบูรณ์stackoverflow.com/a/16607685/801189ตามคำตอบนี้
VB

10
หลังจากเพิ่มสิ่งนี้ด้วย [path = "*"] คำขอทั้งหมดไปยังไฟล์สแตติกใด ๆ เช่น. css, .js ล้มเหลว ฉันมีเส้นทางที่กำหนดเองที่จัดการ URL ที่มีลักษณะเช่นนี้ " โดเมน / ABCDE.FGHIJ " ไฟล์สแตติกทั้งหมดของฉันอยู่ในไดเรกทอรี / เนื้อหาของฉัน มีวิธีในการแยกไดเรกทอรีทั้งหมดออกจากไดเรกทอรีนี้หรือไม่? การตั้งค่า RAMMFAR เป็นงานจริง แต่ฉันต้องการหลีกเลี่ยงค่าใช้จ่าย
lamarant

2
IIS ท้องถิ่นทำงานกับการเริ่มต้นทับ แต่ IIS8 เข้าใจเส้นทางเท่านั้นโดยไม่ต้องใช้เครื่องหมายทับแรก
Pavel Voronin

2
ฉันมีปัญหาเดียวกันกับ @lamarant ... มันบล็อกไฟล์สแตติก คุณรู้ไหมว่าทำไม? ใช้ MVC4 ที่นี่
eestein

3
มันใช้งานได้ใน MVC5 แต่ถ้าคุณใส่เครื่องหมายสแลชที่จุดเริ่มต้นของเส้นทางมันจะทำงานเฉพาะเมื่อเส้นทางนั้นอยู่หลังชื่อโฮสต์ (ซึ่งไม่สัมพันธ์กับโฟลเดอร์แอป) ตัวอย่างเช่น path / people / * จะใช้ได้กับ www.example.com/people/michael.phelps แต่ไม่ใช่สำหรับ www.example.com/app/people/michael.phelps AFAIK ไม่มีวิธีสร้างเส้นทางที่สัมพันธ์กับแอป
Hogan

46

หลังจาก poking ไปรอบ ๆ ฉันพบว่า relaxUrlToFileSystemMapping ไม่ทำงานเลยสำหรับฉันสิ่งที่ทำงานในกรณีของฉันคือการตั้งค่า RAMMFAR เป็นจริงเช่นเดียวกับที่ถูกต้องสำหรับ (.net 4.0 + mvc3) และ (.net 4.5 + mvc4)

<system.webserver>
    <modules runAllManagedModulesForAllRequests="true">

ระวังเมื่อตั้งค่า RAMMFAR จริงHanselman โพสต์เกี่ยวกับ RAMMFAR และประสิทธิภาพ


5
ระวังเมื่อตั้งค่า RAMMFAR ... มีการสูญเสียประสิทธิภาพหรือไม่ถ้าฉันใช้ <modules runAllManagedModulesForAllRequests = "true">
Shanker Paudel

1
ในกรณีของโปสเตอร์ต้นฉบับไม่ควรมีความจำเป็นเนื่องจากเขาใช้ IIS7 ขึ้นไป มีมันเป็นค่าเริ่มต้นและการตั้งค่า RAMMFAR แน่นอนคุณคิดค่าใช้จ่าย ดูmsdn.microsoft.com/en-us/library/…
Richard

แม้ว่ามันจะมีประโยชน์ แต่ก็ไม่เพียงพอที่จะรับช่วงเวลาที่จะหยุดส่งคืน 404 ใน MVC5 / IIS7 ให้ฉัน
Chris Moschini

เพียงเพื่อย้ำอีกครั้งคุณต้องการหลีกเลี่ยงการเปิดใช้ตัวเลือกนี้
Strake

อย่าทำสิ่งนี้บนไซต์สดหากเป็นไปได้
NickG

27

ฉันเชื่อว่าคุณต้องตั้งค่าคุณสมบัติ relaxUrlToFileSystemMapping ใน web.config ของคุณ Haackเขียนบทความเกี่ยวกับเรื่องนี้เมื่อไม่นานมานี้ (และมีโพสต์ SOอื่น ๆ ที่ถามคำถามประเภทเดียวกัน)

<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true" />

แก้ไข จากความคิดเห็นด้านล่าง. NET / IIS รุ่นที่ใหม่กว่าอาจต้องใช้สิ่งนี้ในsystem.WebServerองค์ประกอบ

<system.webServer>
<httpRuntime relaxedUrlToFileSystemMapping="true" />

2
นี่คือสิ่งที่ฉันมีกับ mvc3 + .net4.0 และทำงานได้อย่างสวยงาม แต่ไม่ทำงานอีกต่อไปกับ mvc4 + .net4.5
Tadeu Maia

4
ฉันลองใช้ UU ผ่อนคลายไปยังไฟล์ระบบที่ไม่สำเร็จ ฉันไม่คิดว่ามันจะใช้งานได้กับ MVC รุ่นใหม่ล่าสุด
Mark

สิ่งนี้ทำให้ฉันได้รับ URL /WEB-INF./web.xml และเปลี่ยนเส้นทางไปยังหน้าข้อผิดพลาดที่กำหนดเองเมื่อมีวิธีอื่น ๆ อีกมากมายที่ฉันพยายามใช้ไม่ได้ผล
quentin-starin

3
น่าสนใจ เนื่องจากมันไม่ได้ผลสำหรับคุณฉันกำลังคิดว่ามันจะไม่เหมาะกับฉัน ... เนื่องจากฉันใช้ MVC4 กับ. NET4.5 แต่บิงโกมันทำงานอยู่แล้ว ในกรณีของฉันฉันมี URL ที่มีเครื่องหมาย "" เป็นตัวละครตัวสุดท้าย ฉันได้รับ 404 แต่นี่แก้ไขได้
PandaWood

เขามีผลกระทบด้านความปลอดภัยหรือไม่?
Paesano2000

23

ฉันติดอยู่กับปัญหานี้เป็นเวลานานหลังจากการแก้ไขที่แตกต่างกันทั้งหมดโดยไม่มีประโยชน์

ฉันสังเกตเห็นว่าเมื่อเพิ่มเครื่องหมายสแลช [/] ที่ส่วนท้ายของ URL ที่มีจุด [.] มันไม่ได้มีข้อผิดพลาด 404 และใช้งานได้จริง

ในที่สุดฉันก็แก้ไขปัญหาโดยใช้เครื่องมือเขียน URL ใหม่เช่น IIS URL Rewrite เพื่อดูรูปแบบเฉพาะและผนวกเครื่องหมายทับการฝึกอบรม

URL ของฉันมีลักษณะเช่นนี้: /Contact/~firstname.lastname ดังนั้นรูปแบบของฉันก็คือ: /Contact/~(.*ه^/เทา)$

ฉันได้รับแนวคิดนี้จาก Scott Forsyth โปรดดูลิงก์ด้านล่าง: http://weblogs.asp.net/owscott/handing-mvc-paths-with-dots-in-the-path


สิ่งนี้ใช้ได้สำหรับฉัน (MVC5) คำแนะนำอื่น ๆ ข้างต้นใช้งานไม่ได้และไม่ต้องการเพียงแค่เครื่องหมายทับต่อท้าย ฉันจะเปลี่ยนเส้นทางของฉันเป็นที่แนะนำโดย @ jonduncan05 ที่นี่
markau

ขอบคุณลีออน บันทึกวันที่ฉัน ไม่แน่ใจเกี่ยวกับ web.config ทุกคนพูดถึงที่นี่ แต่เพิ่ม trailing / คือคำตอบที่ฉันต้องการ ในกรณีของฉันฉันสามารถควบคุมคอนโทรลเลอร์ฝั่งเซิร์ฟเวอร์และจาวาสคริปต์ที่เรียกใช้ดังนั้นฉันเพิ่งอัปเดต JavaScript และ voila!
Frog Pr1nce

21

เพียงเพิ่มส่วนนี้ลงใน Web.config และคำขอทั้งหมดไปยังเส้นทาง / {* pathInfo} จะได้รับการจัดการโดยตัวจัดการที่ระบุแม้ว่าจะมีจุดใน pathInfo (นำมาจากตัวอย่าง Web.config โฮสต์ ServiceStack MVC และคำตอบนี้https://stackoverflow.com/a/12151501/801189 )

สิ่งนี้จะใช้ได้ทั้ง IIS 6 และ 7 คุณสามารถกำหนดตัวจัดการเฉพาะให้กับเส้นทางที่แตกต่างกันหลังจาก 'เส้นทาง' โดยการปรับเปลี่ยน path = "*" ในองค์ประกอบ 'เพิ่ม'

  <location path="route">
    <system.web>
      <httpHandlers>
        <add path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" />
      </httpHandlers>
    </system.web>
    <!-- Required for IIS 7.0 -->
    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true" />
      <validation validateIntegratedModeConfiguration="false" />
      <handlers>
        <add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" />
      </handlers>
    </system.webServer>
  </location>

2
ระวังผลการปฏิบัติงาน runAllManagedModulesForAllRequests (RAMMFAR) ได้ สิ่งนี้จะเปิดใช้งานโมดูลที่ได้รับการจัดการทั้งหมดสำหรับทุกคำขอ ไฟล์แบบสแตติกเช่นรูปภาพสามารถประมวลผลได้โดย IIS โดยตรง แต่จะดำเนินการผ่านทุกโมดูลที่เพิ่มโอเวอร์เฮดให้กับทุกคำขอ
ทำเครื่องหมาย

@MarkS ใช่ แต่ฉันเชื่อว่าสิ่งนี้จะส่งผลต่อการร้องขอไปยังเส้นทาง / ... หากเราใช้ส่วน <location> และไม่ได้ตั้งค่า runAllManagedModulesForAllRequests ในส่วน <system.webServer> หลัก
VB

@VB ฉันคิดว่าตัวจัดการนั้นเพียงพอแล้วถ้าคุณมีไฟล์ในระบบที่ตรงกับ URL ที่. NET ควรจะประมวลผล และด้วยเหตุผลบางอย่าง RAMMFAR ไม่ทำงานในระดับ <location> แต่โซลูชันตัวจัดการทำได้
webXL

@webXL <location> จำเป็นเมื่อคุณไม่ต้องการให้ MVC ประมวลผลคำขอไปยังเส้นทางที่ระบุและเพิ่มเส้นทาง IgnoreRoute ("เส้นทาง / {* pathInfo}"); จากนั้น IIS จะดูในส่วนตำแหน่ง <location path = "route"> และจะใช้ตัวจัดการที่ระบุในส่วนตำแหน่ง แต่จะข้ามการกำหนดเส้นทางของ MVC อย่างสมบูรณ์และขั้นตอนขั้นตอนอื่น ๆ ของ MVC ในโครงการของฉัน ServiceStack api ไม่ทำงานหากไม่มีการตั้งค่านั้น
VB

ทำไมจะไม่เพิ่มการจัดการทำงาน? ในกรณีของฉันฉันต้องเพิ่ม RAMMFAR พร้อมกับตัวจัดการ กำลังมองหาคำอธิบายที่ดีที่นี่ :)
Aditya Patil

6

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

คำตอบที่แนะนำจำนวนมากดูเหมือนจะไม่ทำงานใน MVC 5.0

เนื่องจากปัญหาจุด 404 ในส่วนสุดท้ายสามารถแก้ไขได้โดยการปิดส่วนนั้นด้วยเครื่องหมายสแลชต่อไปนี้เป็นเคล็ดลับเล็ก ๆ น้อย ๆ ที่ฉันใช้สะอาดและเรียบง่าย

ในขณะที่รักษาตำแหน่งที่สะดวกไว้ในมุมมองของคุณ:

@Html.ActionLink("Change your Town", "Manage", "GeoData", new { id = User.Identity.Name }, null)

เพิ่ม jquery / javascript เล็กน้อยเพื่อให้งานสำเร็จ:

<script>
    $('a:contains("Change your Town")').on("click", function (event) {
        event.preventDefault();
        window.location.href = '@Url.Action("Manage", "GeoData", new { id = User.Identity.Name })' + "/";
    });</script>

โปรดสังเกตเครื่องหมายทับที่รับผิดชอบในการเปลี่ยนแปลง

http://localhost:51003/GeoData/Manage/user@foo.com

เข้าไป

http://localhost:51003/GeoData/Manage/user@foo.com/

5

คำตอบที่ง่ายสุด ๆ สำหรับผู้ที่มีเพียงสิ่งนี้บนหน้าเว็บเดียว แก้ไข actionlink ของคุณและ + "/" ที่ส่วนท้ายของลิงก์

  @Html.ActionLink("Edit", "Edit", new { id = item.name + "/" }) |

แก้ไขได้สำหรับฉัน! เรียบง่ายและสง่างาม! สิ่งที่น่ารำคาญที่สุดก็คือมันทำงานได้โดยไม่ต้องมีเครื่องหมาย '/' บน Windows 10 ในระหว่างการพัฒนา แต่สำหรับ Windows 2012 นั้นดูเหมือนว่าจำเป็น
Wim ten Brink

2

คุณอาจต้องการคิดถึงการใช้เครื่องหมายขีดคั่นแทนจุด

ในPro ASP MVC 3 Frameworkพวกเขาแนะนำสิ่งนี้เกี่ยวกับการสร้าง URL ที่จำง่าย:

หลีกเลี่ยงสัญลักษณ์รหัสและลำดับอักขระ หากคุณต้องการตัวคั่นคำให้ใช้เส้นประ (/ my-great-article) เครื่องหมายขีดล่างไม่เป็นมิตรและการเว้นวรรคที่เข้ารหัส URL นั้นแปลกประหลาด (/ + + บทความยอดเยี่ยม +) หรือน่าขยะแขยง (/ ของฉัน

นอกจากนี้ยังกล่าวถึงว่า URL ควรอ่านและเปลี่ยนแปลงได้ง่ายสำหรับมนุษย์ อาจเป็นเหตุผลที่คิดเกี่ยวกับการใช้เส้นประแทนจุดก็มาจากหนังสือเล่มเดียวกัน:

อย่าใช้ส่วนขยายชื่อไฟล์สำหรับหน้า HTML (.aspx หรือ. mvc) แต่ใช้สำหรับประเภทไฟล์พิเศษ (.jpg, .pdf, .zip ฯลฯ ) เว็บเบราว์เซอร์ไม่สนใจเกี่ยวกับนามสกุลไฟล์หากคุณตั้งค่าประเภท MIME ให้เหมาะสม แต่มนุษย์ยังคงคาดหวังว่าไฟล์ PDF จะลงท้ายด้วย. pdf

ดังนั้นในขณะที่ช่วงเวลายังคงสามารถอ่านได้สำหรับมนุษย์ (แม้ว่าจะอ่านได้น้อยกว่าขีดกลาง IMO) แต่ก็อาจยังสับสนเล็กน้อย / ทำให้เข้าใจผิดขึ้นอยู่กับสิ่งที่เกิดขึ้นหลังจากช่วงเวลานั้น เกิดอะไรขึ้นถ้ามีคนที่มีนามสกุลของซิป? จากนั้น URL จะเป็น /John.zip แทนที่จะเป็น / John-zip สิ่งที่สามารถทำให้เข้าใจผิดแม้กับนักพัฒนาที่เขียนแอปพลิเคชัน


อาจเป็นชื่อผู้ใช้หรือฟิลด์อื่นที่มีจุดโดยเนื้อแท้ ที่กล่าวว่า StackOverflow แทนที่เครื่องหมายวรรคตอนทั้งหมด (รวมถึง.) ด้วยขีดกลางใน URL ของผู้ใช้: P
jli

ฉันพบสิ่งนี้เพราะฉันมีบริการสืบค้นไฟล์ที่ปลอดภัยซึ่งมีชื่อไฟล์ในพารามิเตอร์เส้นทางอย่างชัดเจน ...
FlavourScape

ลงคะแนนด้วยเหตุผลที่ชัดเจน: ไม่ตอบคำถาม ถ้าทำได้ฉันจะไม่ยอมให้จุดปรากฏใน URL ของฉัน มันจะปรากฏขึ้นเนื่องจาก URL ถูกสร้างขึ้นและต้องสามารถอ่านได้โดยมนุษย์
mg30rg

2

ขึ้นอยู่กับความสำคัญที่คุณจะต้องรักษา URI ไว้โดยไม่มีการสอบถามคุณสามารถส่งค่าที่มีจุดเป็นส่วนหนึ่งของการสอบถามไม่ใช่ URI

เช่น www.example.com/people?name=michael.phelps จะทำงานได้โดยไม่ต้องเปลี่ยนการตั้งค่าหรืออะไรก็ตาม

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


1

เป็นไปได้ไหมที่จะเปลี่ยนโครงสร้าง URL ของคุณ?
สำหรับสิ่งที่ฉันกำลังทำอยู่ฉันพยายามหาเส้นทาง

url: "Download/{fileName}"

แต่มันล้มเหลวกับสิ่งที่มี ในนั้น.

ฉันเปลี่ยนเส้นทางเป็น

    routes.MapRoute(
        name: "Download",
        url:  "{fileName}/Download",
        defaults: new { controller = "Home", action = "Download", }
    );

ตอนนี้ฉันสามารถใส่localhost:xxxxx/File1.doc/Downloadและใช้งานได้ดี

ผู้ช่วยของฉันในมุมมองหยิบมันขึ้นมาด้วย

     @Html.ActionLink("click here", "Download", new { fileName = "File1.doc"})

ที่ทำให้ลิงก์ไปยังlocalhost:xxxxx/File1.doc/Downloadรูปแบบเช่นกัน

บางทีคุณอาจใส่คำที่ไม่จำเป็นเช่น "/ ดู" หรือการกระทำที่ส่วนท้ายของเส้นทางของคุณเพื่อให้คุณสมบัติของคุณจบลงด้วยการต่อท้าย/สิ่งที่ต้องการ/mike.smith/view


1

มันง่ายเหมือนการเปลี่ยน path = " ." ไปที่ path = " " เพียงลบจุดในเส้นทางสำหรับ ExensionlessUrlHandler-Integrated-4.0 ใน web.config

นี่คือบทความที่ดีhttps://weblog.west-wind.com/posts/2015/Nov/13/Serving-URLs-with-File-Extensions-in-an-ASPNET-MVC-Application/2015/Nov/13


ลิงก์นี้นำฉันไปสู่ทางออกที่ดีที่สุดในการแก้ไขปัญหาของฉัน (ส่วนมีตัวอักษร "." แต่ลูกค้าจะไม่ติดตามด้วย "/") แก้ไขโดยการมีบรรทัดนี้ใน <system.webServer> ของ web.config - <modules runAllManagedModulesForAllRequests = "true" />
NickBeaugié

1

พยายามแก้ปัญหาทั้งหมดข้างต้น แต่ก็ไม่มีวิธีใดที่เหมาะกับฉัน สิ่งที่ทำงานได้คือฉันถอนการติดตั้ง. NET เวอร์ชั่น> 4.5 รวมถึงรุ่นที่พูดได้หลายภาษาทั้งหมด; ในที่สุดฉันก็เพิ่มรุ่นใหม่ (ภาษาอังกฤษเท่านั้น) ทีละชิ้น ตอนนี้เวอร์ชันที่ติดตั้งในระบบของฉันคือ:

  • 2.0
  • 3.0
  • 3.5 4
  • 4.5
  • 4.5.1
  • 4.5.2
  • 4.6
  • 4.6.1

และมันยังคงทำงานอยู่ ณ จุดนี้ ฉันกลัวที่จะติดตั้ง 4.6.2 เพราะอาจทำให้ทุกอย่างยุ่ง

ดังนั้นฉันสามารถคาดเดาได้ว่า 4.6.2 หรือเวอร์ชันที่ไม่ใช่ภาษาอังกฤษทั้งหมดนั้นทำให้การกำหนดค่าของฉันสับสน


0

ฉันสามารถแก้ไขปัญหาเฉพาะรุ่นของฉันได้ (ต้องทำให้ /customer.html เส้นทางไปยัง / ลูกค้าไม่สามารถใช้เครื่องหมายทับ) ได้โดยใช้วิธีแก้ปัญหาที่https://stackoverflow.com/a/13082446/1454265และเส้นทางทดแทน = "*. html ที่"


0

เนื่องจากโซลูชันอาจพิจารณาการเข้ารหัสเป็นรูปแบบที่ไม่มีสัญลักษณ์.เหมือน base64

ใน js ควรจะเพิ่ม

btoa(parameter); 

ในตัวควบคุม

byte[] bytes = Convert.FromBase64String(parameter);
string parameter= Encoding.UTF8.GetString(bytes);

0

เพิ่มกฎการเขียนซ้ำ URL ลงในที่เก็บถาวร Web.config คุณต้องมีโมดูล URL Rewriteติดตั้งอยู่แล้วใน IIS ใช้กฎการเขียนซ้ำต่อไปนี้เป็นแรงบันดาลใจสำหรับคุณเอง

<?xml version="1.0" encoding="utf-8"?>
<configuration>

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Add trailing slash for some URLs" stopProcessing="true">
        <match url="^(.*(\.).+[^\/])$" />
          <conditions>
              <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
              <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Redirect" url="{R:1}/" />
      </rule>
    </rules>
    </rewrite>
</system.webServer>

</configuration> 

0

นอกจากนี้ (ที่เกี่ยวข้อง) ตรวจสอบลำดับการแมปของตัวจัดการ เรามี .ashx ด้วย. svc (เช่น /foo.asmx/bar.svc/path) ในเส้นทางหลังจากนั้น การแมป. svc นั้นมีค่า 404 ก่อนสำหรับพา ธ . svc ที่จับคู่กับ. asx ไม่คิดมาก แต่อาจเป็นเพราะ url ที่เข้ารหัสเส้นทางจะดูแลสิ่งนี้


-3
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace WebApplication1.Controllers
{
    [RoutePrefix("File")]
    [Route("{action=index}")]
    public class FileController : Controller
    {
        // GET: File
        public ActionResult Index()
        {
            return View();
        }

        [AllowAnonymous]
        [Route("Image/{extension?}/{filename}")]
        public ActionResult Image(string extension, string filename)
        {
            var dir = Server.MapPath("/app_data/images");

            var path = Path.Combine(dir, filename+"."+ (extension!=null?    extension:"jpg"));
           // var extension = filename.Substring(0,filename.LastIndexOf("."));

            return base.File(path, "image/jpeg");
        }
    }
}

1
คำตอบนี้เป็นคำถามของ OP อย่างไร ใจอธิบายได้โปรด?
kayess

มันไม่ใช่วิธีแก้ปัญหามันเป็นแฮ็คที่ต้องใช้นามสกุลไฟล์ที่จะวางลงในเส้นทาง uri (โดยไม่มีจุด) เช่น "~ / Image / jpg / cow" เพื่อเรียกคืนไฟล์ "/ app_data / images / cow / jpg" - - ไม่ใช่ทางออกสำหรับผู้ชายคนนี้และทุกคนที่พบความต้องการนี้
Shaun Wilson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.