ไม่พบหน้า HTTP 404 ใน Web Api ที่โฮสต์ใน IIS 7.5


97

ฉันมีแอปพลิเคชัน Web Api มันทำงานได้ดีอย่างสมบูรณ์เมื่อฉันทดสอบโดยใช้เซิร์ฟเวอร์ dev debugging VS 2010 แต่ตอนนี้ฉันปรับใช้กับ IIS 7.5 แล้วและฉันได้รับข้อผิดพลาด HTTP 404 เมื่อพยายามเข้าถึงแอปพลิเคชัน

นี่คือ web.config ของฉัน

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-FlowGearProxy-20123141219;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="true" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
</configuration>

2
ฉันมีปัญหาเดียวกัน ฉันยังไม่พบวิธีแก้ปัญหา แต่สิ่งหนึ่งที่ฉันค้นพบคือถ้าเลือกไซต์ใน IIS จากนั้นไปที่คุณสมบัติ Handler Mappings จะมีการแมปสำหรับไฟล์แบบคงที่ซึ่งแมป * กับไฟล์ที่ต้องมีอยู่ เมื่อฉันลบการแมปนี้และเพิ่มการแมปใหม่สำหรับกริยา HTTP ทั้งหมดฉันไม่ได้รับ 404 อีกต่อไป แต่จะถูกแทนที่ด้วยหน้าว่างเปล่าสีขาว
Despertar

>> โดยใช้เซิร์ฟเวอร์ dev ที่ดีบัก VS 2010 - AKA Cassini ผู้ชั่วร้าย ดูblogs.msdn.com/b/rickandy/archive/2011/04/22/… - หากไม่ได้ผลให้สร้างแอป MVC 4 WebApi ใหม่และทดสอบการปรับใช้ - แบบง่าย
RickAndMSFT

คำตอบ:


94

ฉันกำลังดิ้นรนกับเรื่องนี้เช่นกัน โชคดีที่สตีฟ Michelotti เอกสารวิธีการแก้ปัญหาที่ทำงานสำหรับฉันที่นี่

ในตอนท้ายของวันฉันเปิดใช้งานคำกริยาทั้งหมด (verb = "*") ให้กับตัวจัดการ ExtensionlessUrlHandler-Integrated-4.0 ในการกำหนดค่าเว็บของฉัน

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
        <handlers>
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
</system.webServer>

คนอื่น ๆ ชี้ให้เห็นว่าการเปิดใช้งาน WebDAV ทำให้เกิดปัญหา โชคดีที่ฉันไม่พบปัญหานั้นเช่นกัน


3
+1 สำหรับสิ่งนั้น แต่ฉันเปลี่ยนใน Handler Mappings บนแอปพลิเคชันจากด้วย IIS Manager เปิดใช้งานสำหรับคำกริยาจำนวนมาก ฉันเปลี่ยนเป็นคำกริยาทั้งหมด (*) และ voila แต่จะดีกว่าเสมอที่จะใส่ในแหล่งที่มา
Wolf5

1
ฉันประสบปัญหาเดียวกัน แต่การเปลี่ยนแปลงเหล่านี้ไม่ได้ช่วยฉัน มีการกำหนดค่าอื่น ๆ ด้วยหรือไม่? หรืออาจเป็นการอ้างอิงห้องสมุด? โปรดดูที่: stackoverflow.com/questions/27303523/…
Babak

2
หลายคนบอกว่าการใช้ runAllManagedModulesForAllRequests จะส่งผลต่อประสิทธิภาพ (ตรวจสอบคำตอบของ hemant gautam ด้านล่าง) อย่างไรก็ตามฉันไม่สามารถใช้บริการเดียวกันได้ดังนั้นฉันจึงทำตามการกำหนดค่าที่นี่: blog.maartenballiauw.be/post/2012/12/07/…ลิงก์นั้นยังชี้ให้เห็นว่าการเปิดใช้ WebDAV อาจส่งผลต่อผลลัพธ์เช่นกัน
Hoàng Long

คำตอบสุดเจ๋ง!
EnocNRoll - AnandaGopal Pardue

1
*สำหรับผมคำกริยาที่มีอยู่แล้ว ฉันต้องเปลี่ยนเส้นทาง*เช่นกันเพื่อให้มันใช้งานได้เหมือน*.เดิม
Alsty

55

มีปัญหาเดียวกัน การตั้งค่านี้ช่วยแก้ปัญหาได้

<system.webServer>
    .....
    <modules runAllManagedModulesForAllRequests="true" />
    .....
</system.webServer>

ตามที่อธิบายไว้ในhttp://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.htmlวิธีแก้ปัญหาข้างต้นควรหลีกเลี่ยง ใช้สิ่งนี้แทน วิธีแก้ปัญหาเดียวกันนี้มีให้โดย Lopsided ด้วย เก็บไว้ที่นี่เพื่อให้ผู้ใช้หลีกเลี่ยงการใช้โซลูชันแรกที่ใช้งานได้

<modules>
  <remove name="UrlRoutingModule-4.0" />
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  <!-- any other modules you want to run in MVC e.g. FormsAuthentication, Roles etc. -->
</modules>

ใช้งานได้ดี แต่ก็ไม่ใช่วิธีแก้ปัญหาที่ดีนัก ควรใช้ UrlRoutingModule (ดูคำตอบโดย Lopsided ด้านล่าง) britishdeveloper.co.uk/2010/06/…
Der_Meister

37

หากติดตั้งหรือเปิดใช้งาน IIS หลังจาก ASP.NET คุณจะต้องลงทะเบียน ASP.NET กับ IIS ด้วยตนเองเพื่อให้แอปพลิเคชัน. NET ของคุณทำงานได้

สำหรับ Windows 7 และรุ่นก่อนหน้า:

  1. เรียกใช้ Command Prompt (cmd.exe) ในฐานะผู้ดูแลระบบ
  2. ไปที่ตำแหน่ง. NET Framework ที่เหมาะสม (เช่น C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319)
  3. เรียกใช้ aspnet_regiis.exe -i

สำหรับ Windows 8 และใหม่กว่า:

  1. จากเมนูเริ่มให้พิมพ์ "เปิดหรือปิดคุณสมบัติของ windows" แล้วเลือกผลลัพธ์แรก
  2. ขยายบริการข้อมูลทางอินเทอร์เน็ต: บริการเวิลด์ไวด์เว็บ: คุณสมบัติการพัฒนาแอปพลิเคชันและเลือก ASP.NET 4.5 (หรือ ASP.NET 3.5 หากคุณต้องการสนับสนุนโครงการบน. NET Framework 2.0-3.5)
  3. คลิกตกลง

2
ฉันย้ายจาก IIS Express เพื่อการพัฒนาไปสู่ ​​IIS แบบเต็มและนี่คือสิ่งที่แก้ไขให้ฉัน ขอบคุณ!
Jim Brown

1
คล้ายกับ @JimBrown ด้านบน; มันใช้งานได้สำหรับฉันหลังจากย้ายจาก IIS express
SolidRegardless

สิ่งนี้แก้ไขให้ฉันได้ บน Windows 7, Visual Studio 2015 Ent, เว็บไซต์ MVC 5 ใหม่เปลี่ยนจาก IIS Express เป็น IIS แบบเต็ม
Geoff Gunter

26

คุณกำลังเรียกใช้แอป Web API ในไดเรกทอรีเสมือนหรือแอปพลิเคชันหรือไม่

ตัวอย่างเช่นฉันมีปัญหาเดียวกันเมื่อฉันย้ายโครงการไปยัง IIS ในพื้นที่ของฉันภายใต้เว็บไซต์เริ่มต้น> SampleWebAPI ฉันเชื่อว่านี่เป็นเพราะการเปลี่ยนแปลงในการURLกำหนดเส้นทางดังนี้:

ต้นฉบับ: localhost:3092/api/values
ย้ายแล้ว: localhost/SampleWebAPI/api/values

หากคุณย้ายโครงการ Web API ไปยังเว็บไซต์ของตัวเองที่ทำงานบนพอร์ตอื่นดูเหมือนว่าจะใช้งานได้

หมายเหตุเพิ่มเติม: ฉันมีปัญหาที่ซับซ้อนมากขึ้นโดยเพิ่มapiเป็นนามแฝงของแอปพลิเคชันภายในเว็บไซต์ของฉันซึ่งทำให้ผลURLเป็น

localhost:81/api/api/values - สังเกตเห็นสิ่งนี้หลังจากย้ายเว็บไซต์ไปยังเว็บไซต์ของตนเอง

ดังนั้นเพราะผมอยากที่จะรักษาระยะห่างระหว่างเว็บไซต์และเว็บไซต์ของโครงการ MVC เว็บ API ของฉันฉันมีการเปลี่ยนแปลงกฎระเบียบในการกำหนดเส้นทางglobal.asaxสำหรับเว็บ API "DefaultAPI" จากapi/{controller}/{id}ไป{controller}/{id}และคน ASP.NET MVC Defaultจากไป{controller}/{id}info/{controller}/{id}


3
อิอิอิ ... ผมได้รับการตั้งชื่อ app ของฉันในIISฐานะapiเกินไป สิ่งนี้ทำให้เกิดการทดลองและข้อผิดพลาดในการดีบักนานกว่า 2 ชั่วโมง ขอบคุณมากสำหรับการแบ่งปันประสบการณ์ของคุณ! เปลี่ยนชื่อและตอนนี้ฉันกลับมาทำธุรกิจอีกครั้ง : D
Leniel Maccaferri

ขอบคุณ - นี่คือปัญหาของฉัน! :)
เจน

ฉันไม่แน่ใจว่าทำไมการเรียก API จึงล้มเหลวเมื่อฉันโฮสต์โปรเจ็กต์ของฉันภายใต้พอร์ต 8080 เพียงแค่ย้ายเป็นไดเรกทอรีเสมือนภายใต้เว็บไซต์เริ่มต้นก็ทำเคล็ดลับ :)
Kiran

14

นี่เป็นคำตอบเดียวที่เหมาะกับฉัน ...

ฉันมีปัญหาที่คล้ายกัน ... ดูเหมือนว่าไม่ว่าฉันจะทำอะไรไม่มีอะไรถูกเปลี่ยนเส้นทางและไฟล์ส่วนกลางของฉันก็ถูกเพิกเฉย ฉันคิดอย่างจริงจังเพียงแค่จบลงก่อนที่จะพบคำตอบนี้ ฉันหวังว่าลิงค์นี้จะช่วยคนอื่นได้


การเพิ่มสิ่งต่อไปนี้ลงในไฟล์ web.config ได้ผลสำหรับฉัน:

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>

มีแท็กsystem.webServerอยู่แล้ว แต่ฉันเพิ่มแท็กโมดูลเข้าไปแล้วแท็กลบและเพิ่มแท็กโมดูล


พบปัญหานี้บนเซิร์ฟเวอร์ 2008 (ไม่ใช่ R2) และนี่เป็นทางออกเดียวที่ใช้ได้ผลสำหรับฉัน นอกจากนี้ฉันต้องรวมสิ่งนี้เข้ากับการตั้งค่าแอปพูลเป็นโหมด "รวม"
Zoomzoom

11

ตรวจสอบบางสิ่ง:

  1. ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง. NET Framework 4 แล้ว
  2. ตรวจสอบให้แน่ใจว่าเวอร์ชัน 4 ของ. NET Framework ถูกเลือกสำหรับเว็บไซต์และไดเรกทอรีเสมือนของคุณ (ถ้ามี)
  3. ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง MVC หรือมี DLL ที่เหมาะสมในไดเร็กทอรี bin ของคุณ
  4. อาจต้องอนุญาตส่วนขยายบริการเว็บ ASP.NET 4.0
  5. ใส่แอปพลิเคชันในแอปพูลของตัวเอง
  6. ตรวจสอบว่าไดเร็กทอรีมีสิทธิ์ดำเนินการ "สคริปต์เท่านั้น" เป็นอย่างน้อย

ฉันมีเว็บแอปพลิเคชันปกติอื่น ๆ อีก 4 รายการที่ทำงานบนเซิร์ฟเวอร์ IIS เดียวกันและทั้งหมดใช้. net framework 4 ดังนั้นข้อใดใน 4 ข้อที่ไม่ต้องการ เมื่อฉันเผยแพร่แอปพลิเคชัน mvc ของฉันฉันได้เพิ่มการพึ่งพาที่ปรับใช้ได้และเพิ่ม ASP.NET MVC ดังนั้นมันจึงอยู่ในไดเรกทอรีถังของฉัน
Armand

@Armand ฟังดูเหมือนเคย # 1 # 2 ยังคงจำเป็น การเพิ่มการอ้างอิงที่สามารถปรับใช้งานได้หากคุณทำตามที่อธิบายไว้ที่นี่: haacked.com/archive/2011/05/25/bin-deploying-asp-net-mvc-3.aspxควรดูแล # 3 ด้านบน # 4 อาจจำเป็นหรือไม่จำเป็นแม้ว่าฉันจะไม่มีความรู้ที่จะบอกคุณเมื่อมันเป็น & ไม่จำเป็น
Joe Schrag

9

ฉันมีปัญหาที่คล้ายกัน ฉันมีการตั้งค่าที่ถูกต้องในไฟล์ web.config ของฉัน แต่กำลังเรียกใช้พูลแอปพลิเคชันในโหมดคลาสสิกแทนที่จะเป็นโหมดรวม

ภาพหน้าจอ


7

ปัญหานี้อาจเกิดขึ้นได้เนื่องจากสิ่งต่อไปนี้

1. ในเว็บ Config

<system.webServer>
     <modules runAllManagedModulesForAllRequests="true" /> 
<system.webServer>

2. ตรวจสอบให้แน่ใจว่ามีสิ่งต่อไปนี้อยู่ในโฟลเดอร์ bin บนเซิร์ฟเวอร์ที่ใช้งาน Web API

  • System.Net.Http

  • System.Net.Http.Formatting

  • System.Web.Http.WebHost

  • System.Web.Http

แอสเซมบลีเหล่านี้จะไม่ถูกคัดลอกในโฟลเดอร์ bin ตามค่าเริ่มต้นถ้าการเผยแพร่ผ่าน Visual Studio เนื่องจากแพ็คเกจ Web API ถูกติดตั้งผ่าน Nuget ในเครื่องพัฒนา หากคุณต้องการให้ไฟล์เหล่านี้พร้อมใช้งานเป็นส่วนหนึ่งของ Visual Studio เผยแพร่คุณต้องตั้งค่า CopyLocal เป็น True สำหรับ Assemblies

Sadish Kumar.V


จำเป็นต้องใช้ DLL เหล่านั้นหากคุณไม่ได้ติดตั้ง MVC บนเซิร์ฟเวอร์ ในกรณีของฉันฉันเห็นหน้าว่างเมื่อพยายามเรียกใช้ API การเพิ่ม DLL ด้วยตนเองใช้งานได้สำหรับฉัน ขอบคุณ !!
Vipul bhojwani

ปัญหาของฉันได้รับการแก้ไขหลังจากเพิ่ม System.Net.Http ไปยังโฟลเดอร์เผยแพร่หลักของฉันคือโซลูชัน Asp.net Core
mohas

6

จากนี้คำตอบดังนั้นผมเพิ่งมีการเปลี่ยนแปลงpath="*."ไปpath="*"สำหรับเพิ่มExtensionlessUrlHandler-Integrated-4.0ในconfiguration>system.WebServer>handlersในของฉันweb.config

ก่อน:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

หลังจาก:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

ขอบคุณเกร็กมากฉันกำลังจะฆ่าฉันเพราะเส้นทางโง่ ๆ นี้ = "*." แต่ตอนนี้หลังจากทิ้งจุดที่น่าสังเวชนี้ทุกอย่างก็ทำงานได้ดี! ขอบคุณมาก!
Junior Silva

5

ฉันยังพบปัญหานี้ ฉันแก้ไขปัญหาโดยไปที่ Application Pools> Application Pool Name และเปลี่ยน. NET Framework จากเวอร์ชัน v.2.0.50727 เป็น v4.0.30319


1
ฉันค้นพบสิ่งนี้ด้วยตัวเองเช่นกัน โหวตคำตอบของคุณเพราะพลาดง่าย เมื่อฉันสร้างไซต์สำหรับแอปของฉัน IIS จะสร้างพูลแอปให้ฉันโดยอัตโนมัติตั้งค่าเป็น. NET v2.0 !! ทำไมทำไมทำไม ?? :)
Mike Taverne

4

ฉันต้องปิดใช้งานตัวเลือกการเผยแพร่ไฟล์ "คอมไพล์ล่วงหน้าระหว่างการเผยแพร่"


แล้วทำที่ไหนล่ะ
vapcguy

1
ในหน้าต่างโต้ตอบที่ปรากฏขึ้นเมื่อคุณคลิกขวาที่โปรเจ็กต์แล้วเลือกเผยแพร่ ดูเหมือนว่านี่
Pakman

3

มีการแก้ไขอย่างเป็นทางการจาก microsoft: http://support.microsoft.com/kb/980368

ฉันไม่แนะนำอย่างยิ่งให้ใช้ <โมดูล runAllManagedModulesForAllRequests = "true"> สิ่งนี้นำไปสู่คำขอทั้งหมด (แม้กระทั่ง. jpg, .css, .pdf ฯลฯ ) จะถูกประมวลผลโดยโมดูล HTTP ที่ลงทะเบียนทั้งหมด มีสองช่วงเวลาเชิงลบ: a) ภาระเพิ่มเติมในทรัพยากรฮาร์ดแวร์ b) ข้อผิดพลาดที่อาจเกิดขึ้นเนื่องจากโมดูล http จะประมวลผลเนื้อหาประเภทใหม่


1
ขอบคุณดังนั้นมาก! ฉันลองทุกอย่างแล้วและนี่เป็นสิ่งเดียวที่แก้ไขได้
Oran Dennison

เช่นเดียวกันขอบคุณมากที่เพิ่มคำตอบนี้! เป็นทางออกสำหรับปัญหาของฉัน!
Octavio Garbarino

2

ฉันเริ่มได้รับคำตอบ 404 รายการจาก Web API หลังจากทำตามบทช่วยสอน Windows Azure ที่บอกให้ฉันเพิ่มไฟล์ "WebRole.cs" ในโครงการของฉัน

หลังจากลบ "WebRole.cs" ออกจากโปรเจ็กต์ของฉันการเรียก Web API ของฉันก็เริ่มทำงานอีกครั้ง


สิ่งนี้ได้ผลสำหรับฉัน ฉันย้ายแอปพลิเคชัน Azure กลับไปยังการปรับใช้ VM และหลังจากแสดงความคิดเห็นเกี่ยวกับเนื้อหาของ WebRole.cs การเรียกใช้ WebAPI ของฉันก็เริ่มทำงานอีกครั้ง
Scott

ฉันต้องใช้เวลาหนึ่งวันกับสิ่งนี้! WebRole.cs แสดงความคิดเห็นได้ผล - สงสัยว่าทำไม
Igorek

2

โปรดตรวจสอบให้แน่ใจว่าพูลแอปพลิเคชันอยู่ในโหมดรวม
และเพิ่มสิ่งต่อไปนี้ในไฟล์ web.config:

<system.webServer>
    .....
    <modules runAllManagedModulesForAllRequests="true" />
    .....
</system.webServer>

2

ในกรณีของฉันปัญหาคือฉันพยายามเข้าถึงไซต์ที่

myserver.myintranet.com/mysite

แต่การเชื่อมโยงเว็บไซต์สำหรับ http ใน IIS ไม่มีชื่อโฮสต์ที่ระบุในการเชื่อมโยง มันได้ผลมาก่อนและฉันไม่รู้ว่ามันปลิวไปได้อย่างไร

เมื่อฉันใส่myserver.myintranet.comชื่อโฮสต์ 404 ก็หายไป

ในตัวจัดการ IIS คุณเข้าไปในBindings ...ในบานหน้าต่างการดำเนินการจากนั้นแก้ไขการโยง http เพื่อระบุชื่อโฮสต์


แม้แต่ฉันก็ประสบปัญหาเดียวกัน และตามที่คุณแนะนำฉันได้ตรวจสอบชื่อโฮสต์ในการโยง http และอัปเดตอย่างถูกต้องเท่านั้น แต่ปัญหาของฉันยังคงมีอยู่ หมายเหตุ: ฉันโฮสต์แอปพลิเคชัน API เป็นแอปพลิเคชันลูก โปรดแนะนำหากมีใครมีความคิดเกี่ยวกับเรื่องนี้ เช่น "sample.example.com" เป็นแอปพลิเคชันหลักของฉันและสร้าง API ภายใต้โดเมนนี้ในชื่อ "sample.example.com/myAPI/"
Krishna Mani


1

มีปัญหาเดียวกันการตอบสนอง 404 สำหรับตัวควบคุมเว็บ api เมื่อทำหน้าที่จาก IIS แต่ทุกอย่างทำงานได้ดีจาก VS2010 วิธีแก้ปัญหาข้างต้นไม่ได้ผลสำหรับฉัน ในที่สุดฉันพบว่าปัญหาคือเราได้เพิ่มการสนับสนุน WSE 3.0 สำหรับแอปพลิเคชันและ dll Microsoft.Web.Services3 หายไปในไดเร็กทอรี / bin ของแอปพลิเคชัน แปลก แต่หลังจากคัดลอก dll แล้วการแมปเส้นทางก็เริ่มทำงาน


1

สำหรับฉันปัญหาคือไซต์รากถูกกำหนดค่าให้ใช้พูลแอป. NET 2.0 และแอปพลิเคชันของฉันภายในไซต์นั้นคือ. NET 4.5

ฉันสร้างไซต์ใหม่ด้วยพูลแอป. NET 4 และวางแอปพลิเคชันของฉันไว้ที่รากของสิ่งนั้น - และก็ใช้ได้ดี


1

ฉันต่อสู้กับเรื่องนี้เช่นกัน ปัญหาที่แท้จริงของฉันคือฉันมี ASMX Web Service ซึ่งเมื่อฉันป้อนพารามิเตอร์ลงในวิธีการบนเว็บและทดสอบแล้วมันจะให้ 404 แก่ฉันวิธีการเฉพาะนั้นใช้งานได้ดีในอดีตและไม่มีการเปลี่ยนแปลง เผยแพร่ซ้ำเท่านั้น จากนั้นฉันก็มาที่นี่และลองคำตอบที่โพสต์ทั้งหมดและไม่มีอะไรช่วย

ทางออกที่ดีที่สุดของฉัน? ฉันรู้ว่ามันรุนแรงมาก แต่ฉันเพิ่งสร้างโซลูชัน Visual Studio และโครงการเว็บใหม่ MVC ที่เลือกจากนั้นฉันก็ทำการ "เพิ่ม"> "รายการใหม่" เลือก "Visual C #"> "เว็บ" และ "บริการเว็บ (ASMX)" ภายใต้นั้น ฉันคัดลอกโค้ดหลังรหัสเก่าของฉันทั้งหมดจากนั้นฉันจดบันทึกเนมสเปซที่ให้ไฟล์ใหม่ในโปรเจ็กต์ใหม่ของฉันจากนั้นวางโค้ดเก่าทั้งหมดของฉันลงในไฟล์โค้ดหลังใหม่ในโปรเจ็กต์ใหม่และใส่เนมสเปซ กลับไปสู่สิ่งที่เคยเป็น

จากนั้นฉันสร้างโฟลเดอร์ของฉันในโปรเจ็กต์ที่ฉันมีก่อนที่จะใช้ Visual Studio เพื่อทำ "เพิ่ม"> "โฟลเดอร์ใหม่" จากนั้นคัดลอกกลับในไฟล์ของฉันไปยังโฟลเดอร์จากโปรเจ็กต์อื่นของฉันโดยใช้ Windows Explorer จากนั้นคลิกขวาที่แต่ละโฟลเดอร์ใน Visual Studio และทำการ "เพิ่ม"> "รายการที่มีอยู่ ... " และดึงรายการในโฟลเดอร์เหล่านั้นไปยังโฟลเดอร์ Visual Studio ของโครงการใหม่ของฉัน ฉันอ้างอิงแอสเซมบลี. NET ทั้งหมดของฉันอีกครั้งโดยเปิดทั้งสองโปรเจ็กต์เพื่อที่ฉันจะได้เปรียบเทียบว่าอันไหนที่ฉันอ้างถึงก่อนหน้านี้ (มีหลายอัน) ฉันต้องตั้งชื่อโครงการใหม่ให้แตกต่างกันเล็กน้อยโดยพื้นฐานแล้วฉันทำอะไรบางอย่างที่เทียบได้กับ "GeneralWebApp" แทนที่จะเป็น "MyWebApp" ดังนั้นฉันจึงต้องทำ "Replace All" ในโซลูชันทั้งหมดเพื่อแทนที่ชื่อนั้น

จากนั้นฉันก็ทำการ "สร้างใหม่ทั้งหมด" ในโปรเจ็กต์จากนั้นเริ่มต้นด้วยปุ่ม "เล่น" ที่ Visual Studio จะให้เมื่อฉันสร้างได้อย่างถูกต้อง มันทำงานได้ดี ดังนั้นฉันจึงเผยแพร่มันและทุกอย่างก็เรียบร้อยบนเซิร์ฟเวอร์ที่ฉันเผยแพร่เมื่อฉันเรียกใช้จากที่นั่น ฉันไม่มีคำอธิบายว่าเกิดอะไรขึ้น แต่นั่นคือวิธีที่ฉันผ่านมันมาได้ ไม่ใช่การทดสอบที่ไม่ดีเพียงเพื่อดูว่า Visual Studio กำลังทำอะไรอยู่หรือไม่


1

หากคุณวางเฉพาะโฟลเดอร์ binใน IIS (หลังจากสร้างโครงการ) ปัญหานี้ก็จะเกิดขึ้นเช่นกัน ในสถานการณ์นี้คุณควรเผยแพร่โครงการโดยใช้ VisualStudio จากนั้นวางโฟลเดอร์ที่เผยแพร่ลงใน IIS


0

คุณกำลังร้องขอ HTTP ประเภทใด

นี่เป็นคำตอบด้านซ้ายเล็กน้อย แต่คุณได้ลองลบหน้าข้อผิดพลาดเริ่มต้นของ IIS สำหรับ 404 เพื่อตรวจสอบว่า API ของคุณส่งคืนจริงหรือไม่?

ฉันมีปัญหาโดยที่ฉันต้องการให้เมธอดคอนโทรลเลอร์ส่งคืน 404 เมื่อฉันโพสต์ id ผิดไป ฉันพบว่าฉันมักจะได้รับหน้า "ไม่พบไฟล์หรือไดเรกทอรี" ของ IIS 404 แทนการตอบสนอง HTTP จาก API ของฉัน การลบหน้าข้อผิดพลาด 404 เริ่มต้นช่วยแก้ปัญหาได้

ปัญหาที่แตกต่างกัน แต่คุณไม่เคยรู้มาก่อนว่าอาจช่วยได้;)


0

การกำหนดค่าส่วนนี้ในไฟล์ web.config สามารถช่วยฉันได้: ในส่วน system.webServer:

      <security>
          <requestFiltering>
              <verbs applyToWebDAV="true">
                  <remove verb="PUT" />
                  <add verb="PUT" allowed="true" />
                  <remove verb="DELETE" />
                  <add verb="DELETE" allowed="true" />
                  <remove verb="PATCH" />
                  <add verb="PATCH" allowed="true" />
              </verbs>
          </requestFiltering>
      </security>      

0

ฉันเพิ่งมีข้อผิดพลาด 404 ไม่พบกับเส้นทาง / ตัวควบคุม Web Api 2 ทั้งหมดของฉัน ดังนั้นฉันจึงไปที่เซิร์ฟเวอร์จริงและพยายามเรียกดูโดยใช้ localhost แทนชื่อโฮสต์และได้รับ "404.7 Not Found - โมดูลการกรองคำขอถูกกำหนดค่าให้ปฏิเสธนามสกุลไฟล์"

โพสต์ดังนั้นนี้ช่วยฉันแก้ปัญหาได้


0

ได้รับการแก้ไขสำหรับฉันเมื่อฉันเปิดใช้งานช่องทำเครื่องหมายสำหรับ UrlRoutingModule-4.0:

ตัวจัดการ IIS> โมดูล> เลือก UrlRoutingModule-4.0> แก้ไขโมดูล> เลือกกล่องกาเครื่องหมาย "เรียกใช้เฉพาะสำหรับการร้องขอไปยังแอปพลิเคชัน ASP.NET หรือตัวจัดการที่มีการจัดการ"


0

ฉันมีปัญหาเดียวกัน: บนเครื่องที่เพิ่งติดตั้งด้วย Visual Studio 2013 โครงการ web api ทำงานภายใต้ IISExpress แต่ไม่อยู่ภายใต้ IIS ในเครื่อง ฉันพยายามทุกอย่างที่หาได้ แต่ในที่สุดปัญหาก็ไม่จำเป็นกับ Web API แต่ด้วย MVC: แม้ว่าจะติดตั้งแล้วก็ไม่มีโครงการ MVC ทำงานอยู่

สิ่งที่ได้ผลสำหรับฉันคือการถอนการติดตั้ง IIS (จาก ADD / REMOVE Windows Features) จากนั้นติดตั้งใหม่จากนั้นเรียกใช้ aspnet_regiis -i บางทีนี่อาจช่วยคนอื่นได้


0

ฉันใช้เวลานานมากในการลองทำสิ่งต่างๆมากมายจนในที่สุดฉันก็รู้ว่าฉันกำลังเพิ่มแอปพลิเคชันเว็บของฉันที่ไม่ได้อยู่ในไซต์ / เว็บไซต์เริ่มต้น แต่ในเว็บไซต์อื่นเชื่อมโยงกับพอร์ตอื่น เห็นได้ชัดว่าการลอง localhost บนพอร์ต 80 จะให้ 404


0

ฉันไม่ทำอะไรเลยเพียงแค่เพิ่มแท็กนี้ใน web.config มันใช้งานได้ปัญหานี้เกิดขึ้นหนึ่งในประเด็นต่อไปนี้

  1. ใช้ Web Api ในโปรเจ็กต์เดียวกันโดยใช้แบบฟอร์ม MVC หรือ asp.net

  2. ใช้ RouteConfig และ WebApiConfig ใน Global.asax เป็น GlobalConfiguration.Configure (WebApiConfig.Register); RouteConfig.RegisterRoutes (RouteTable.Routes);

  3. ใช้ RouteConfig เพื่อวัตถุประสงค์ 2 ประการคือแบบฟอร์ม asp.net โดยใช้กับการกำหนดเส้นทาง friendlyurl และ mvc สำหรับการกำหนดเส้นทาง MVC

เราแค่ใช้แท็กนี้ใน web.config มันก็ใช้ได้

<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
   .........................
</modules>
</system.webServer>

0

พบปัญหาเดียวกันกับ Web API และ. Net Core Web API ทำงานได้ดีใน VS 2017 ในขณะที่ดีบัก แต่ส่งคืน 404 เมื่อเผยแพร่ไปยัง IIS 7.5 วิธีแก้ปัญหาสำหรับฉันคือเปลี่ยนวิธีสร้างไซต์ แทนที่จะเผยแพร่ไปยังรูทของเว็บไซต์ (สร้างโดยคลิกขวาที่ไซต์ ... เพิ่มเว็บไซต์) ฉันต้องสร้างแอปพลิเคชัน (สร้างโดยคลิกขวาที่เว็บไซต์ ... เพิ่มแอปพลิเคชัน) และเผยแพร่ไปยังโฟลเดอร์นั้น โปรดทราบว่าสำหรับเวอร์ชัน Core ฉันต้องเปลี่ยนการตั้งค่า Application Pool .NET Framework Version เป็น "No Managed Code"


0

สำหรับฉันวิธีแก้ปัญหาคือการลบบรรทัดต่อไปนี้ออกจากไฟล์ web.config ของฉัน:

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.1.3" newVersion="4.1.1.3" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

ฉันสังเกตเห็นว่า VS ได้เพิ่มโดยอัตโนมัติไม่แน่ใจว่าทำไม


0

ลอง webconfg นี้ .. แทนที่ "NewsApi.dll" ด้วย dll หลักของคุณ!


<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\NewsApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
  </location>
</configuration>

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