Không tìm thấy trang HTTP 404 trong Web Api được lưu trữ trong IIS 7.5


96

Tôi có một ứng dụng Web Api. Nó hoạt động hoàn toàn tốt khi tôi thử nghiệm bằng máy chủ nhà phát triển gỡ lỗi VS 2010. Nhưng bây giờ tôi đã triển khai nó lên IIS 7.5 và tôi đang gặp lỗi HTTP 404 khi cố gắng truy cập ứng dụng.

Đây là web.config của tôi

<?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
Tôi có cùng một vấn đề. Tôi vẫn chưa tìm ra giải pháp, tuy nhiên một điều tôi đã phát hiện ra là nếu chọn trang web trong IIS, sau đó vào tính năng Handler Mappings, có một ánh xạ cho các tệp tĩnh ánh xạ * tới một tệp phải tồn tại. Khi tôi xóa ánh xạ này và thêm ánh xạ mới cho tất cả các động từ HTTP, tôi không còn nhận được 404 nữa, nó được thay thế bằng một trang trắng trống.
Despertar

>> sử dụng máy chủ nhà phát triển gỡ lỗi VS 2010. - AKA, Cassini độc ác. Xem blog.msdn.com/b/rickandy/archive/2011/04/22/… - Nếu điều đó không hiệu quả, hãy tạo một ứng dụng WebApi MVC 4 mới và triển khai thử nghiệm - đơn giản
RickAndMSFT 3/12/12

Câu trả lời:


93

Tôi cũng đang đấu tranh với điều này. May mắn thay, Steve Michelotti đã ghi lại một giải pháp phù hợp với tôi ở đây .

Vào cuối ngày, tôi đã bật tất cả các động từ (verb = "*") cho trình xử lý ExtensionlessUrlHandler-Integrated-4.0 trong cấu hình web của tôi.

<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>

Những người khác đã chỉ ra rằng việc kích hoạt WebDAV gây ra sự cố. May mắn thay, tôi cũng không gặp phải vấn đề đó.


3
+1 cho cái đó. Nhưng tôi đã thay đổi nó trong Bản đồ xử lý trên ứng dụng từ với Trình quản lý IIS. Nó được bật cho một loạt các động từ. Tôi đã thay đổi điều đó thành tất cả các động từ (*) và thì đấy. Nhưng luôn luôn tốt hơn để đưa vào nguồn.
Wolf 5

1
Tôi cũng gặp vấn đề tương tự, nhưng những thay đổi này không giúp được gì cho tôi. Có cấu hình nào khác không? Hoặc có thể là một tài liệu tham khảo thư viện? Ngoài ra, vui lòng xem: stackoverflow.com/questions/27303523/…
Babak

2
nhiều người nói rằng sử dụng runAllManagedModulesForAllRequests sẽ ảnh hưởng đến hiệu suất (kiểm tra câu trả lời của hemant gautam bên dưới). Tuy nhiên, tôi không thể nhận được cùng một dịch vụ hoạt động, vì vậy tôi làm theo cấu hình tại đây: blog.maartenballiauw.be/post/2012/12/07/… Liên kết đó cũng chỉ ra rằng việc bật WebDAV cũng có thể ảnh hưởng đến kết quả
Hoàng Long

Câu trả lời tuyệt vời!
EnocNRoll - AnandaGopal Pardue

1
Đối với tôi, động từ đã là *. Tôi đã phải thay đổi đường dẫn đến *cũng như để làm cho nó làm việc như *.vẫn gây ra vấn đề này
Alsty

56

Có cùng một vấn đề. Cài đặt cấu hình này đã giải quyết được sự cố.

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

Như đã giải thích trong http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html giải pháp ở trên nên tránh. Sử dụng cái này thay thế. Giải pháp tương tự cũng được cung cấp bởi Lopsided. Giữ nó ở đây để cho phép người dùng tránh triển khai giải pháp hoạt động đầu tiên.

<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>

Hoạt động tốt, nhưng nó không phải là giải pháp tốt cho lắm. Tốt hơn là sử dụng UrlRoutingModule (xem câu trả lời của Lopsided bên dưới). britishdeveloper.co.uk/2010/06/…
Der_Meister

37

Nếu IIS được cài đặt hoặc bật sau ASP.NET, bạn sẽ cần đăng ký ASP.NET với IIS theo cách thủ công để ứng dụng .NET của bạn hoạt động.

Đối với Windows 7 trở về trước:

  1. Chạy Command Prompt (cmd.exe) với tư cách quản trị viên.
  2. Điều hướng đến vị trí .NET Framework thích hợp. (ví dụ: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319)
  3. Chạy aspnet_regiis.exe -i

Đối với Windows 8 trở lên:

  1. Từ menu bắt đầu, nhập "Bật hoặc tắt các tính năng của cửa sổ" và chọn kết quả đầu tiên.
  2. Mở rộng Dịch vụ Thông tin Internet: Dịch vụ World Wide Web: Tính năng Phát triển Ứng dụng và chọn ASP.NET 4.5 (hoặc ASP.NET 3.5 nếu bạn cần hỗ trợ các dự án trên .NET Framework 2.0-3.5).
  3. Bấm OK.

2
Tôi đã chuyển từ IIS Express để phát triển lên IIS đầy đủ và đây là những gì đã khắc phục sự cố cho tôi. Cảm ơn!
Jim Brown

1
Tương tự như @JimBrown ở trên; nó đã làm việc cho tôi sau khi chuyển từ IIS express.
SolidRegardless

Điều này đã giải quyết nó cho tôi. Trên Windows 7, Visual Studio 2015 Ent, trang web MVC 5 mới, đã thay đổi từ IIS Express thành IIS đầy đủ.
Geoff Gunter

26

Bạn đang chạy ứng dụng API Web trong một thư mục ảo hay một ứng dụng?

Ví dụ: Tôi đã gặp vấn đề tương tự khi chuyển dự án của mình sang IIS cục bộ trong Trang web mặc định> SampleWebAPI. Tôi tin rằng điều này là do sự thay đổi trong URLđịnh tuyến như sau:

Bản gốc: localhost:3092/api/values
Đã chuyển: localhost/SampleWebAPI/api/values

Nếu bạn di chuyển dự án Web API sang trang web của chính nó đang chạy trên một cổng khác, nó có vẻ hoạt động.

Lưu ý bổ sung: Tôi đã làm phức tạp thêm vấn đề bằng cách thêm apilàm bí danh của ứng dụng trong trang web của tôi, điều này khiến hiệu lực URLlà:

localhost:81/api/api/values - nhận thấy điều này sau khi chuyển trang web sang trang web riêng của nó

Do đó, vì tôi muốn duy trì sự tách biệt giữa trang web của mình và trang web dự án mvc web api, tôi đã thay đổi quy tắc định tuyến global.asaxcho API Web "DefaultAPI" từ api/{controller}/{id}sang {controller}/{id}và ASP.NET MVC Defaulttừ {controller}/{id}sang info/{controller}/{id}.


3
hehehe ... Tôi đã đặt tên ứng dụng của tôi trong IISkhi apiquá. Điều này đã gây ra tất cả quá trình thử và gỡ lỗi này trong hơn 2 giờ. Cảm ơn bạn rất nhiều vì đã chia sẻ kinh nghiệm của bạn! Đổi tên nó và bây giờ tôi trở lại kinh doanh một lần nữa. : D
Leniel Maccaferri

Cảm ơn - đây là vấn đề của tôi! :)
Jen

Tôi không chắc tại sao các lệnh gọi api không thành công khi tôi đã lưu trữ dự án của mình dưới cổng 8080, chỉ cần di chuyển nó như một thư mục ảo trong trang web mặc định đã thực hiện thủ thuật :)
Kiran

14

Đây là câu trả lời duy nhất phù hợp với tôi ...

Tôi đã gặp sự cố tương tự ... Có vẻ như bất kể tôi đã làm gì, không có gì được chuyển hướng và tệp toàn cầu của tôi bị bỏ qua. Tôi đã nghiêm túc xem xét chỉ cần kết thúc tất cả trước khi tôi tìm thấy câu trả lời này. Tôi hy vọng liên kết này sẽ giúp ai đó khác.


Việc thêm phần sau vào tệp web.config phù hợp với tôi:

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

Tất nhiên, thẻ system.webServer đã có nhưng tôi đã thêm thẻ mô-đun vào nó và sau đó là thẻ xóa & thêm vào thẻ mô-đun.


Khắc phục sự cố này trên máy chủ 2008 (không phải R2) và đây là giải pháp duy nhất phù hợp với tôi. Ngoài ra, tôi phải kết hợp điều này với việc đặt nhóm ứng dụng thành chế độ "tích hợp".
Zoomzoom

11

Một số điều cần kiểm tra:

  1. Đảm bảo rằng bạn đã cài đặt .NET Framework 4.
  2. Đảm bảo rằng phiên bản 4 của .NET Framework được chọn cho trang web và thư mục ảo của bạn (nếu có).
  3. Đảm bảo rằng bạn đã cài đặt MVC hoặc có các tệp DLL thích hợp trong thư mục bin của bạn.
  4. Có thể cần cho phép các tiện ích mở rộng dịch vụ web ASP.NET 4.0
  5. Đặt ứng dụng trong nhóm ứng dụng của riêng nó.
  6. Đảm bảo rằng thư mục có ít nhất quyền thực thi "Chỉ tập lệnh".

Tôi có 4 ứng dụng web bình thường khác đang chạy trên cùng một máy chủ IIS và chúng đều đang sử dụng .net framework 4. vậy điểm nào trong 4 điểm đó không cần thiết? khi tôi xuất bản ứng dụng mvc của mình, tôi đã thêm các phụ thuộc có thể triển khai thêm và thêm ASP.NET MVC để nó nằm trong thư mục bin của tôi
Armand

@Armand Có vẻ như bạn đã hoàn thành # 1. # 2 vẫn cần thiết. Thêm các phần phụ thuộc có thể triển khai, nếu bạn đã làm như được mô tả ở đây: haacked.com/archive/2011/05/25/bin-deploy-asp-net-mvc-3.aspx , nên lưu ý đến # 3 ở trên. # 4 có thể cần thiết hoặc không, mặc dù tôi không có kiến ​​thức để nói cho bạn biết khi nào cần và không cần thiết.
Joe Schrag

9

Tôi đã có một vấn đề tương tự. Tôi đã có cài đặt phù hợp trong tệp web.config của mình nhưng đang chạy nhóm ứng dụng ở chế độ Cổ điển chứ không phải chế độ Tích hợp

ảnh chụp màn hình


7

Sự cố này cũng có thể xảy ra do những điều sau

1.Trong Web.Config

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

2.Đảm bảo rằng các thông tin sau có sẵn trong thư mục bin trên máy chủ nơi API Web được triển khai

  • System.Net.Http

  • System.Net.Http.Formatting

  • System.Web.Http.WebHost

  • System.Web.Http

Các tập hợp này sẽ không được sao chép trong thư mục bin theo mặc định nếu xuất bản thông qua Visual Studio vì các gói API Web được cài đặt thông qua Nuget trong máy phát triển. Tuy nhiên, nếu bạn muốn các tệp này có sẵn như một phần của Visual Studio xuất bản thì bạn cần đặt CopyLocal thành True cho các Assemblies này

Sadish Kumar.V


Các DLL đó là bắt buộc nếu bạn chưa cài đặt MVC trên Máy chủ. Trong trường hợp của tôi, tôi đã thấy một trang trống khi cố gọi API. Thêm DLL theo cách thủ công làm việc cho tôi. Cảm ơn!!
Vipul bhojwani

Vấn đề của tôi đã được giải quyết sau khi thêm System.Net.Http vào thư mục xuất bản chính, giải pháp của tôi là Asp.net Core
mohas

6

Dựa trên câu trả lời SO này , tôi chỉ phải thay đổi path="*."thành path="*"phần được thêm ExtensionlessUrlHandler-Integrated-4.0vào configuration>system.WebServer>handlerstrongweb.config

Trước:

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

Sau:

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

Cảm ơn anh rất nhiều Greg, anh sắp giết em vì con đường ngu ngốc này = "*." nhưng bây giờ, sau khi bỏ dấu chấm đau khổ này, mọi thứ hoạt động hoàn toàn tốt đẹp! Cảm ơn rât nhiều!
Junior Silva

5

Tôi cũng gặp phải vấn đề này. Tôi đã giải quyết sự cố bằng cách đi tới Application Pool> Application Pool Name và thay đổi .NET Framework từ phiên bản v.2.0.50727 thành v4.0.30319.


1
Tôi cũng tự mình khám phá ra điều này. Ủng hộ câu trả lời của bạn vì nó rất dễ bỏ sót. Khi tôi tạo trang web cho ứng dụng của mình, IIS tự động tạo một nhóm ứng dụng cho tôi, đặt thành .NET v2.0 !! Tại sao, tại sao, tại sao ?? :)
Mike Taverne

3

Tôi đã phải vô hiệu hoá Tuỳ chọn Xuất bản Tệp "Biên dịch trước trong khi xuất bản."


Và bạn làm điều đó ở đâu?
vapcguy

1
Nó nằm trên một hộp thoại xuất hiện khi bạn nhấp chuột phải vào dự án và chọn Xuất bản. Nó trông giống như thế này
Pakman

3

Có bản sửa lỗi chính thức từ microsoft: http://support.microsoft.com/kb/980368

Tôi thực sự KHÔNG khuyên bạn nên sử dụng <modules runAllManagedModulesForAllRequests = "true">. Điều này dẫn đến tất cả các yêu cầu (thậm chí .jpg, .css, .pdf, v.v.) sẽ được xử lý bởi tất cả các mô-đun HTTP đã đăng ký. Có hai thời điểm tiêu cực: a) tải bổ sung trên tài nguyên phần cứng; b) lỗi tiềm ẩn, vì mô-đun http sẽ xử lý loại nội dung mới.


1
Cảm ơn bạn rất nhiều! Tôi đã thử hoàn toàn mọi thứ khác, và đây là điều duy nhất đã sửa nó.
Oran Dennison

Tương tự ở đây, cảm ơn bạn rất nhiều vì đã thêm câu trả lời này! Là giải pháp cho vấn đề của tôi!
Octavio Garbarino

2

Tôi bắt đầu nhận được 404 phản hồi từ API Web sau khi làm theo hướng dẫn Windows Azure yêu cầu tôi thêm tệp "WebRole.cs" vào dự án của mình.

Sau khi xóa "WebRole.cs" khỏi dự án của tôi, các lệnh gọi API Web của tôi bắt đầu hoạt động trở lại.


Điều này đã làm việc cho tôi. Tôi đã di chuyển ứng dụng Azure trở lại triển khai VM và sau khi nhận xét nội dung của WebRole.cs, các lệnh gọi WebAPI của tôi bắt đầu hoạt động trở lại.
Scott

Tôi phải dành một ngày cho việc này! WebRole.cs cho ý kiến làm việc - thắc mắc tại sao tuy nhiên
Igorek

2

Vui lòng đảm bảo nhóm ứng dụng đang ở chế độ Tích hợp
Và thêm phần sau vào tệp web.config:

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

2

Trong trường hợp của tôi, vấn đề chỉ đơn giản là tôi đang cố truy cập trang web tại

myserver.myintranet.com/mysite

Nhưng liên kết trang web cho http trong IIS không có tên máy chủ được chỉ định trong liên kết. Nó đã hoạt động trước đó và tôi không biết làm thế nào mà nó bị thổi bay.

Sau khi tôi đặt myserver.myintranet.comtên máy chủ, 404 đã biến mất.

Trong IIS Manager, bạn đi đến Bindings ... trong ngăn hành động, sau đó chỉnh sửa liên kết http để chỉ định tên máy chủ.


Ngay cả tôi cũng đang phải đối mặt với vấn đề tương tự. và như bạn đề xuất, tôi đã kiểm tra tên máy chủ trong liên kết http, và nó chỉ được cập nhật đúng cách. Nhưng vấn đề của tôi vẫn còn. Lưu ý: Tôi đã lưu trữ ứng dụng API của mình dưới dạng ứng dụng con. Vui lòng đề xuất nếu ai có ý tưởng về điều này. ví dụ: "sample.example.com" là ứng dụng chính của tôi và tạo ra một API dưới miền này là "sample.example.com/myAPI/"
Krishna Mani


1

Gặp vấn đề tương tự, phản hồi 404 cho bộ điều khiển api web khi được cung cấp từ IIS nhưng mọi thứ hoạt động tốt từ VS2010. Không có giải pháp nào ở trên phù hợp với tôi. Cuối cùng, tôi thấy rằng vấn đề là chúng tôi đã thêm hỗ trợ WSE 3.0 cho ứng dụng và dll Microsoft.Web.Services3 bị thiếu trong thư mục / bin của ứng dụng. Kỳ lạ, nhưng sau khi sao chép dll, ánh xạ tuyến đường bắt đầu hoạt động.


1

Đối với tôi, vấn đề là trang web gốc đã được định cấu hình để sử dụng nhóm ứng dụng .NET 2.0 và ứng dụng của tôi trong trang web đó là .NET 4.5.

Tôi đã tạo một trang web mới với nhóm ứng dụng .NET 4 và đặt ứng dụng của tôi ở gốc của nó - và điều đó hoạt động tốt.


1

Tôi cũng phải vật lộn với điều này. Vấn đề chính xác của tôi là tôi có một Dịch vụ Web ASMX, khi tôi nhập một tham số vào một phương thức web và thử nghiệm nó, thì nó sẽ cung cấp cho tôi 404. Phương thức cụ thể trước đây đã hoạt động tốt và không bị thay đổi, chỉ tái xuất bản. Sau đó, tôi đến đây và thử tất cả các câu trả lời đã đăng và không có gì giúp được.

Giải pháp cuối cùng của tôi? Tôi biết điều này là rất quyết liệt, nhưng tôi vừa tạo một dự án web và giải pháp Visual Studio mới. Đã chọn MVC, sau đó tôi đã thực hiện "Thêm"> "Mục mới", chọn "Visual C #"> "Web" và "Dịch vụ web (ASMX)" theo đó. Tôi đã sao chép tất cả mã phía sau mã cũ của mình, sau đó tôi ghi lại không gian tên mà nó cung cấp cho tệp mới trong dự án mới của tôi, sau đó dán tất cả mã cũ của tôi vào tệp mã phía sau mới trong dự án mới và đặt không gian tên trở lại những gì nó đã được.

Sau đó, tôi đã tạo các thư mục trong dự án của mình mà tôi đã có trước khi sử dụng Visual Studio để thực hiện "Thêm"> "Thư mục mới", sau đó sao chép lại các tệp trong tệp của tôi vào các thư mục từ dự án khác của tôi bằng Windows Explorer, sau đó nhấp chuột phải vào từng thư mục trong Visual Studio và thực hiện "Thêm"> "Mục hiện có ..." và kéo các mục trong các thư mục đó vào thư mục Visual Studio trong dự án mới của tôi. Tôi đã tham chiếu lại tất cả các hợp ngữ .NET của mình, mở cả hai dự án để tôi có thể so sánh những dự án tôi đã tham chiếu trước đây (có một số). Ví dụ: tôi phải đặt tên cho dự án mới của mình hơi khác - về cơ bản, tôi đã làm điều gì đó có thể so sánh với "GeneralWebApp" thay vì "MyWebApp" - vì vậy tôi phải thực hiện "Replace All" trong toàn bộ giải pháp của mình để thay thế tên đó,

Sau đó, tôi đã thực hiện "Xây dựng lại tất cả" trên dự án, sau đó khởi động dự án bằng nút "Phát" mà Visual Studio đưa ra khi tôi xây dựng chính xác. Nó hoạt động tốt. Vì vậy, tôi đã xuất bản nó, và mọi thứ đều ổn trên máy chủ nơi tôi xuất bản nó, khi tôi chạy nó từ đó. Tôi không có lời giải thích về những gì đã xảy ra, nhưng đó là cách tôi vượt qua nó. Đây không phải là một bài kiểm tra tồi chỉ để xem liệu Visual Studio đang làm gì đó đã làm hỏng nó.


1

Nếu bạn chỉ đặt thư mục bin trong IIS (sau khi xây dựng dự án), sự cố này cũng sẽ xảy ra. Trong tình huống này, bạn nên xuất bản dự án bằng VisualStudio, sau đó đặt thư mục đã xuất bản vào IIS.


0

Bạn đang thực hiện loại yêu cầu HTTP nào?

Đây là một câu trả lời hơi bên trái trường nhưng bạn đã thử xóa trang lỗi mặc định IIS cho 404 để kiểm tra xem API của bạn thực sự đang trả về cái gì chưa?

Tôi đã gặp sự cố, theo đó tôi muốn phương thức bộ điều khiển trả về 404 khi tôi ĐĂNG sai id cho nó. Tôi nhận thấy rằng tôi luôn nhận được trang "Không tìm thấy tệp hoặc thư mục" IIS 404 thay vì phản hồi HTTP từ API của tôi. Xóa trang lỗi 404 mặc định đã giải quyết được sự cố.

Vấn đề khác nhau nhưng bạn không bao giờ biết nó có thể hữu ích;)


0

Phần cấu hình này trong tệp web.config có thể giúp ích cho tôi: trong phần 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

Gần đây tôi đã gặp lỗi 404 không tìm thấy với tất cả các tuyến / bộ điều khiển Web Api 2 của mình. Vì vậy, tôi đã vào máy chủ thực tế và cố gắng duyệt bằng localhost thay vì tên máy và nhận được "404.7 Not Found - Mô-đun lọc yêu cầu được định cấu hình để từ chối phần mở rộng tệp".

Bài này SO giúp tôi giải quyết nó.


0

Nó đã được giải quyết cho tôi, khi tôi bật hộp kiểm cho UrlRoutingModule-4.0:

Trình quản lý IIS> Mô-đun> chọn UrlRoutingModule-4.0> Chỉnh sửa Mô-đun> chọn hộp kiểm "Chỉ gọi các yêu cầu đến ứng dụng ASP.NET hoặc trình xử lý được quản lý".


0

Tôi đã gặp vấn đề tương tự: trên một máy mới được cài đặt Visual Studio 2013, dự án api web đang hoạt động theo IISExpress, nhưng không hoạt động dưới IIS cục bộ. Tôi đã thử mọi thứ tôi có thể tìm thấy, nhưng cuối cùng vấn đề không cần thiết với API Web mà là với MVC: ngay cả khi nó đã được cài đặt, không có dự án MVC nào đang chạy.

Điều phù hợp với tôi là gỡ cài đặt IIS (khỏi ADD / REMOVE Windows Features), sau đó cài đặt lại nó và sau đó chạy aspnet_regiis -i. Có thể điều này sẽ giúp ai đó khác.


0

Tôi đã dành rất nhiều thời gian để thử rất nhiều thứ để cuối cùng nhận ra rằng tôi đã thêm ứng dụng web của mình không phải trong Trang web / Trang web mặc định, mà trong một trang web khác được liên kết với một cổng khác. Rõ ràng là thử localhost trên cổng 80 sẽ cho kết quả 404.


0

tôi không làm gì cả, chỉ cần thêm thẻ này vào web.config, nó hoạt động, vấn đề này đưa ra một trong những điểm sau

  1. Sử dụng Web Api trong cùng một dự án bằng cách sử dụng các biểu mẫu MVC hoặc asp.net

  2. Sử dụng RouteConfig và WebApiConfig trong Global.asax làm GlobalConfiguration.Configure (WebApiConfig.Register); RouteConfig.RegisterRoutes (RouteTable.Routes);

  3. Sử dụng RouteConfig cho 2 mục đích, biểu mẫu asp.net sử dụng với định tuyến thân thiện và mvc cho định tuyến MVC

chúng tôi chỉ cần sử dụng thẻ này trong web.config, nó sẽ hoạt động.

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

0

Gặp phải vấn đề tương tự với Web API và .Net Core Web API. Hoạt động tốt trong VS 2017 khi gỡ lỗi, nhưng trả về 404 khi được xuất bản lên IIS 7.5. Giải pháp cho tôi là thay đổi cách tôi tạo trang web. Thay vì xuất bản lên thư mục gốc của Trang Web (được tạo bằng cách nhấp chuột phải vào Sites ... Thêm Trang web), tôi phải tạo Ứng dụng (được tạo bằng cách nhấp chuột phải vào Trang web ... Thêm Ứng dụng) và xuất bản vào thư mục đó. Lưu ý rằng đối với phiên bản Core, tôi đã phải thay đổi cài đặt Phiên bản .NET Framework của Nhóm ứng dụng thành "Không có mã được quản lý".


0

Đối với tôi, giải pháp là xóa các dòng sau khỏi tệp web.config của tôi:

<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>

Tôi nhận thấy rằng VS đã tự động thêm chúng, không rõ tại sao


0

Hãy thử webconfg này .. thay thế "NewsApi.dll" bằng dll chính của bạn!


<?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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.