Kết quả ASP MVC trong IIS 7: Lỗi HTTP 403,14 - Bị cấm


146

Tôi đang phát triển một dự án web ASP MVC. Bây giờ tôi có một yêu cầu buộc tôi phải triển khai vào IIS7 trong quá trình phát triển (để kiểm tra một số tính năng). Tôi nhận được thông báo lỗi được đề cập ở trên bất cứ khi nào tôi cố gắng nhập URL của trang web. (Lưu ý: máy phát triển: Vista Home Premium, IIS7)

Những gì tôi đã làm cho đến bây giờ:

Đã chỉnh sửa tệp HOSTS (C: \ WINDOWS \ system32 \ driver \ etc \ hosts).

Đặt hai tên miền trong đó (127.0.0.1 domain1.com & 127.0.0.1 domain2.com).

Đã tạo thư mục c: \ website \ dirOfApplication và được triển khai từ trong Visual Studio 8 đến thư mục này.

Trong IIS7 đã tạo một trang web mới với tên máy chủ domain1.com và thư mục ứng dụng ở trên.

Nhập địa chỉ domain1.com trong trình duyệt Web dẫn đến lỗi trên (Lỗi HTTP 403,14 - Bị cấm - Máy chủ Web được định cấu hình để không liệt kê nội dung của thư mục này.)

Tôi nghĩ rằng tôi đang thiếu một cái gì đó nhưng không biết những gì! Đã cố gắng triển khai các tệp System.Web.Mvc, System.Web.Abstraction & System.Web.Routing với kết quả tương tự. Bất cứ khi nào tôi cố gắng nhấn F5 và chạy ứng dụng, nó hoạt động tốt!


có thể sao chép ASP.NET MVC trên IIS 7.5
Fenton

Câu trả lời:


224

Có lẽ nó hữu ích với ai đó: Sau khi chuyển đổi ứng dụng của tôi sang MVC 4 với .NET framework 4.5 và cài đặt khung trên máy chủ của tôi với IIS 7.0, tôi đã gặp phải lỗi 'cấm' tương tự được đề cập trong câu hỏi. Tôi đã thử tất cả các tùy chọn được mô tả ở trên nhưng không có kết quả, khi tôi nhận thấy

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

đã bị thiếu trong web.config của tôi. Sau khi thêm điều này, mọi thứ đã làm việc. Đơn giản, nhưng dễ bỏ qua ...

BIÊN TẬP:

Tất nhiên giải pháp trên sẽ có hiệu quả, nhưng thực sự là lãng phí tài nguyên. Tôi nghĩ tốt hơn là thêm mô-đun định tuyến như được chỉ ra bởi Chris Herring trong các bình luận.

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

2
Hóa ra khi tôi gỡ cài đặt gói NuGet, nó đã gỡ bỏ runAllManagedModulesForAllRequests="true"khỏi Web.config. Cảm ơn bạn đã đề cập đến điều này trước khi tôi dành cả đêm để cố gắng tìm ra điều này.
Schmalls

3
ĐIỀU NÀY!! Arrrrgh tôi đã dành / lãng phí cả ngày để cố gắng làm việc này cho đến khi tôi tìm thấy câu trả lời của bạn, cảm ơn bạn! Điều kỳ lạ là nó sẽ chạy trên IIS trên máy cục bộ của tôi, nhưng không phải trên hộp sản xuất và cả hai đều chạy IIS7.5
Glenn Slaven

1
Điều đó là vậy đó. Gỡ cài đặt Cassette Nuget đôi khi loại bỏ nó. Cảm ơn.
Zachary Scott

8
cố gắng tránh sử dụng cài đặt này bằng cách thêm mô-đun định tuyến - britishdeveloper.co.uk/2010/06/ trên
Chris Herring

6
Tôi thích câu trả lời bình luận "Có lẽ nó hữu ích với ai đó" ... lol ... Có vẻ như nó hữu ích với TON người, bao gồm cả tôi.
Paul

126

Đã trả lời về SO tại đây , câu hỏi: 403 - Bị cấm triển khai MVC 3 cơ bản trên iis7.5

Chạy đi aspnet_regiis -i. Thường thì tôi thấy bạn cần phải làm điều đó để ứng dụng 4.0 hoạt động. Mở một dấu nhắc lệnh dưới dạng Administrator(nhấp chuột phải vào biểu tượng dấu nhắc lệnh và chọn Chạy với tư cách Quản trị viên):

cd \
cd Windows\Microsoft.NET\Framework\v4.xxx.xxx
aspnet_regiis -i

Khi nó đã được cài đặt và đăng ký, hãy đảm bảo ứng dụng của bạn đang sử dụng nhóm ứng dụng được đặt thành .NET 4.0.

CẬP NHẬT: Tôi vừa tìm thấy một vấn đề với lệnh này. Sử dụng -i đã cập nhật tất cả các nhóm ứng dụng lên ASP.NET 4.0.

Sử dụng aspnet_regiis -ircài đặt phiên bản ASP.NET nhưng không thay đổi bất kỳ ứng dụng web nào sang phiên bản này. Bạn cũng có thể muốn xem lại tùy chọn -iru.


Làm việc cho tôi quá. Sau khi chạy lệnh aspnet_regiis -i, UrlMappingModule đã được cài đặt trong IIS.
Manish Gupta

Sau khi cài đặt IIS, tôi cần chạy aspnet_regiis để mọi thứ hoạt động ngay cả khi .NET 4 dường như đã được đăng ký.
Brian

Nếu khung đã được cài đặt trước IIS, thì có, bạn sẽ cần aspnet_regiis.
Brettski

2
Đừng quên rằng đối với hệ thống 64 bit, đó là "Framework64". Tức là, Windows \ Microsoft.NET \ Framework64 \ v4.xxx.xxx
grahamesd

Đối với việc sử dụng này, phiên bản aspnet_regiis 64 hoặc 32 bit không thành vấn đề. Một số trường hợp đặc biệt được liệt kê ở đây: msdn.microsoft.com/en-us/l Library / k6h9cz8h.aspx
Anchor_1

34

Tôi cũng chạy vào lỗi này. Tất cả các cấu hình và quyền là chính xác. Nhưng tôi đã quên sao chép Global.asax vào máy chủ và đó là lỗi gây ra 403.


Trong trường hợp của tôi, tôi đã vô tình di chuyển nó bằng chuột mà không nhận thấy. Cảm ơn!
Mathias Lykkegaard Lorenzen

Chỉ lãng phí 2 giờ vì tôi đã bỏ qua việc sao chép tệp này sau khi xóa sạch thư mục tài liệu web của mình!
Steven Spneum

10

Đó là vì quá chắc chắn về những gì bạn (tôi) đang làm!

Trên máy của tôi có cài đặt IIS 7 nhưng thành phần ASP.NET được yêu cầu (Bảng điều khiển-> Chương trình-> Bật / Tắt-> ASP.NET) thì không.

Vì vậy, cài đặt này đã giải quyết vấn đề


9

Tôi gặp vấn đề tương tự. Bài viết hỗ trợ này của Microsoft đã sửa nó cho tôi.
https://support.microsoft.com/en-us/help/2023146/mvc-2-and-asp.net-4-web-forms-appluggest-that-use-url-routing-might-return-http- 404-lỗi-khi-họ-cố-xử lý-mở rộng-urls-on-iis-7-và-iis-7.5

Trong hộp thoại "Bật hoặc tắt tính năng của Windows" của ứng dụng "Chương trình và tính năng" của Bảng điều khiển Windows, hãy thực hiện các bước sau:

  1. Điều hướng đến nút sau: Dịch vụ thông tin Internet -> Dịch vụ web toàn cầu -> Các tính năng HTTP phổ biến
  2. Đảm bảo rằng tùy chọn "Chuyển hướng lỗi HTTP" được chọn.

-hoặc là-

  1. Điều hướng đến nút sau: Dịch vụ thông tin Internet -> Dịch vụ web toàn cầu -> Tính năng hiệu suất
  2. Đảm bảo rằng tùy chọn "Nén nội dung tĩnh" được chọn. Sau khi một trong hai tùy chọn đã được chọn, nhấp vào "OK" để lưu các thay đổi.

Kích hoạt lại mô-đun chuyển hướng lỗi HTTP hoặc mô-đun nén nội dung tĩnh đảm bảo rằng ASP.NET và IIS đồng bộ hóa chính xác các sự kiện đường ống HTTP. Điều này cho phép mô đun định tuyến URL xử lý các URL không mở rộng.


7

Hãy thử áp dụng các cài đặt sau được hiển thị bên dưới:

1) Cung cấp quyền cần thiết cho IIS_IUSRSngười dùng trên IIS Server(Nhấp chuột phải vào trang web sau đó Chỉnh sửa Quyền> Bảo mật).

nhập mô tả hình ảnh ở đây

2) Nếu bạn sử dụng .NET Framework 4, hãy chắc chắn rằng phiên bản .NET Framework nằm v4.0trên Application Pooltrang web của bạn sử dụng.

nhập mô tả hình ảnh ở đây

3) Mở Commanp Prompt as administratorvà chạy iisresetlệnh để khởi động lạiIIS Server .

Hi vọng điêu nay co ich...


Mẹo: Nếu bạn vẫn nhận được các lỗi cấp phép sau này thì bạn có thể cần phải thực hiện một iisreset trong cmd với tư cách Quản trị viên sau khi thực hiện việc này để trang web của bạn chạy trong IIS.
Cory Koch

6

Trong trường hợp của tôi, cách tiếp cận sau đây đã giúp tôi ra:

  1. aspnet_regiis -i trong Windows\Microsoft.Net\Framework

  2. Thêm mô-đun vào system.webServer

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

Tôi đoán bạn đã bỏ qua khuôn khổ. Nhưng mở cmd như admin, và chạy aspnet_regiis -i trong Windows \ Microsoft.Net \ Framework \ v4.0.30319
DeadlyChambers

5

Vui lòng kiểm tra, nếu bạn đang chạy x64, bạn đã bật các ứng dụng 32 bit trong cài đặt nhóm ứng dụng

nhập mô tả hình ảnh ở đây


3

Trên Bỏ chọn "Tiền biên dịch trong khi xuất bản" - Tôi đã gặp lỗi 403,14 trên một dịch vụ web tôi vừa viết trong VS2015 nên tôi đã viết lại nó trong VS2013 và cũng gặp lỗi tương tự. Trong cả hai trường hợp, tôi đã có "Tiền biên dịch trong khi xuất bản". Tôi đã bỏ chọn nó nhưng vẫn nhận được lỗi. Trong trường hợp của tôi, tôi cũng đã " Xóa tất cả các tệp hiện có trước khi xuất bản " nhưng không xóa mọi thứ khỏi thư mục đích trên máy chủ trước khi sao chép các tệp đã xuất bản mới ở đó. Nếu bạn không làm điều đó - một tệp " PrecompiledApp.config " bị bỏ lại phía sau gây ra sự cố. Khi tôi xóa tệp đó, tôi đã vàng trên cả hai phiên bản VS2013 và VS2015 của dịch vụ web của mình.


2

Tôi đã thử mọi thứ ở đây; không có gì làm việc Vấn đề là trong Web.configtập tin của tôi , bằng cách nào đó ràng buộc lắp ráp phụ thuộc đã thay đổi từ tối thiểu 1đến tối thiểu 0.

<!-- was -->
<runtime>
    <assemblyBinding>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" />
                <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />


<!-- should have been -->
                <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />

1

Xin lưu ý đôi khi sai Managed pipeline modesẽ gây ra lỗi này. Có hai lựa chọn để chọn integratedclassic.


1

Cách khắc phục Lỗi HTTP HTTP 403,14 - Bị cấm Máy chủ web được cấu hình để không liệt kê nội dung của thư mục này

Lỗi này xảy ra khi bạn có MVC 2+ đang chạy được lưu trữ trên IIS 7+, điều này là do ASP.NET 4 chưa được đăng ký trong IIS. Trong trường hợp của tôi, tôi đã tạo một dự án MVC 3 và lưu trữ nó trên IIS 7.5.

Để khắc phục, hãy đảm bảo bạn đã cài đặt MVC 2 trở lên và .Net Framework 4.0, sau đó chạy một dấu nhắc lệnh với tư cách quản trị viên và nhập dòng sau:

32 bit (x86)

% Windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -ir

64 bit (x64)

% Windir% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -ir


1

Kiểm tra tệp Global.asax của bạn . Trong trường hợp của tôi, nó là trống rỗng.


1

Nếu các câu trả lời hàng đầu không hoạt động, hãy tìm một cấu hình có tên PrecompiledApp.configtrong thư mục lưu trữ và xóa nó nếu nó tồn tại. Tệp này ngăn IISExpress và LocalIIS hoạt động đúng. (Và tôi nghĩ đó là một lỗi) Nội dung của tệp trong trường hợp của tôi là:

<precompiledApp version="2" updatable="true"/>

Và tôi khẳng định 100% đó là vấn đề với trường hợp của tôi vì tôi đã thử mọi thứ trong 2 giờ và đã thử nghiệm rất nhiều lần với cấu hình này.

Một điều nữa: Bạn không thể sử dụng aspnet_regiistrong các phiên bản Windows và IIS mới hơn, vì vậy hãy thử

dism /online /enable-feature /featurename:IIS-ASPNET45 /all

1

Bảng điều khiển> bật hoặc tắt các tính năng của windows> Máy chủ Web> Phát triển ứng dụng

Kiểm tra ASP.NET


0

Tôi cũng đã gặp phải lỗi tương tự, mặc dù tất cả các giải pháp được cung cấp vì những lý do sau:

  • Thiếu DLL
  • Chuỗi kết nối cơ sở dữ liệu trỏ đến một máy chủ không thể truy cập.

0

Trong trường hợp của tôi web.config và tất cả các tệp ngoại trừ thư mục / bin bị thiếu (không được sao chép bằng cách nào đó).
Ngớ ngẩn, nhưng đó là điều cuối cùng tôi đã kiểm tra.


0

Gần đây tôi đã gặp lỗi này và thấy rằng sự cố là do tính năng "Chuyển hướng HTTP" không được bật trên Máy chủ Windows của tôi. Bài đăng trên blog này đã giúp tôi khắc phục sự cố để tìm câu trả lời (mặc dù là phiên bản Windows Server cũ hơn): http://bloss.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable -không làm việc với iis.aspx cho các máy chủ mới hơn vào Quản lý máy tính, sau đó cuộn xuống vai trò Máy chủ Web và nhấp vàoadd role services


0

Với dự án ASP.NET với C # 4.5 Tôi đã giải quyết vấn đề như vậy bằng cách cài đặt tiện ích mở rộng ASP.NET trong Trình cài đặt nền tảng web


0

Ngoài ra một điều nữa có thể có thể

cài đặt .net framework 4.0 bằng tay

Giải pháp này dành cho IIS7 trên cửa sổ 7

mở cmd với ưu tiên quản trị

đi tới thư mục "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319"

gõ aspnet_regiis.exe -i

đã đến trình quản lý inet của bạn bằng cách gõ lệnh run "inetmgr"

làm mới IIS7 của bạn

tải lại trang web.


0

Tôi biết bạn có vấn đề này trong một máy chủ nội bộ, nhưng tôi đã gặp vấn đề như vậy trước đây trong một máy chủ bên ngoài và trong trường hợp của tôi, nó có giải pháp riêng, có lẽ nó có thể tiết kiệm thời gian của ai đó:

Trên thực tế, trang web của tôi đã bị DỪNG bởi một số lý do mà hiện tại tôi không biết, để kiểm tra xem bạn có gặp vấn đề tương tự không, trong trang chính của WebsitePanel vào Web -> Trang web sau đó chọn tên miền của trang web của bạn từ danh sách , sau đó ở phía bên phải của trang vừa mở, hãy kiểm tra xem bạn có thấy từ BẮT ĐẦU không, nếu không, bạn thấy từ STOPPED, làm cho nó bắt đầu lại. Đó là tất cả.


0

Tôi biết đây là một chủ đề cũ, nhưng bạn cũng có thể gặp lỗi này (khi bạn đang gỡ lỗi) nếu bạn có một thư mục có tên giống như một tuyến đường trong bộ điều khiển.

Chẳng hạn, nếu bạn có UserContoder, với tuyến đường được gọi là / Người dùng và bạn C ALNG có một thư mục trong giải pháp của bạn có tên là "Người dùng" thì IISExpress sẽ cố gắng duyệt thư mục thay vì hiển thị chế độ xem của bạn.


0

Sau khi thử mọi giải pháp được đề xuất ở đây, tôi đã tìm thấy một giải pháp khả thi khác: URLScan

IIS đã bị vô hiệu hóa WebDAV, ngay cả trong web.config trong ứng dụng của tôi, trình xử lý và mô-đun của WebDAV đã bị xóa. PUT vẫn trả về 403 - Bị cấm mà không có bất kỳ mục nhật ký nào trong nhật ký IIS. (NHẬN / POST hoạt động tốt).

Hóa ra IIS đã có Bộ lọc ISAPI hoạt động (URLScan) được kích hoạt để ngăn tất cả các PUT. Sau khi xóa URLScan, nó hoạt động với tôi.


0

Tình huống của tôi hoàn toàn khác so với bất kỳ điều nào trong số này và thông báo lỗi 403: Cấm là một chút cá trích đỏ.

Nếu hàm Application_Start () của bạn trong mô-đun Global.asax cố gắng truy cập web.config và một mục nhập mà nó tham chiếu không có ở đó, IIS sẽ cuộn lại và (vì một lý do nào đó) ném thông báo lỗi 403: Bị cấm.

Kiểm tra kỹ xem bạn không thiếu mục nhập trong tệp web.config đang cố truy cập trong mô-đun Global.asax của bạn.


0

Trong trường hợp bạn giống tôi và có một ứng dụng sử dụng NHibernate và các câu trả lời ở trên chưa giải quyết được vấn đề của bạn.

Bạn nên nhìn vào chuỗi kết nối trong ứng dụng của bạn; có thể trong tệp webconfig để đảm bảo nó là chính xác.


-1

Tôi đã và đang sử dụng Danh tính Mạo danh:

<system.web>
    <identity impersonate="true" userName="domain\username" password="password"/>
</system.Web>

Khi đẩy lên máy chủ, bạn phải cấp cho người dùng quyền truy cập vào Temporary ASP.NETthư mục Tệp để nó có thể đọc / ghi / thực thi đúng cách:

C:\Windows\Microsoft.NET\"frameworkversion"\"aspversion"\Temporary ASP.NET Files

Rõ ràng thay thế "frameworkversion" và "aspversion" bằng các phiên bản bạn đang sử dụng.


-1

Bước 1: Chọn Trang web mà Lỗi HTTP được tạo trong IIS và sau đó nhấp vào Duyệt thư mục như trong hình dưới đây:

Bước 2: Trong Cửa sổ Duyệt thư mục trong IIS, nhấp vào Bật trong Hành động ở phía bên phải như trong sơ đồ bên dưới:

Bây giờ Duyệt thư mục được bật cho trang web asp.net của bạn, chỉ cần khởi động lại ứng dụng web trong IIS và Duyệt trang web trong trình duyệt của bạn và xem kết quả.


-1

Tôi đang sử dụng: Win Server 2012 R2 / IIS 8.5 / MVC4 / .Net 4.5

Nếu không có cách nào ở trên hoạt động thì hãy thử điều này:

Bỏ chọn "Biên dịch trước khi xuất bản"

Điều này đá vào mông tôi trong vài ngày.


@ d-kermott, có thể là [find] [( stackoverflow.com/a/31319136/912481 ) của tôi cũng hữu ích cho bạn không?
Kamil Gareev

-1

Tôi đã gặp sự cố này nhưng đã được khắc phục dễ dàng bằng cách truy cập Trình quản lý dịch vụ thông tin Internet (IIS), nhấp đúp vào Duyệt thư mục và nhấp vào Bật.

Trong trường hợp của tôi, tôi có thể truy cập các tệp trực tiếp nhưng không thể truy cập các thư mục.


-1

Tôi đã nhập nhầm địa chỉ IP bằng một chữ số, điều đó có nghĩa là nó sẽ đến một trong những máy chủ khác của tôi. Rất khó hiểu khi bạn nhận được một trang lỗi .NET nhưng từ máy sai!

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.