2012-11-06 43 views
11

Tôi đang cố gắng lưu trữ một ứng dụng web ASP.NET MVC4 với IIS 7.5. Khi gỡ lỗi ứng dụng, mọi thứ hoạt động tốt (tôi giả sử điều này là do Xác thực Windows). Tuy nhiên, khi tôi xuất bản ứng dụng và duyệt đến nó tôi nhận được một 405 Phương pháp không được phép lỗi:jQuery POST, Lỗi 405 Phương pháp không được phép

POST http://localhost/ 405 (Method Not Allowed) 
send 
i.extend.ajax 
i.(anonymous function) 
(anonymous function) 

Từ những gì tôi đã đọc bài viết này hoặc là một vấn đề với các Mappings Handler trong IIS hoặc một số cấu hình là là cần thiết trong web.config. Dù bằng cách nào, tôi đã không tìm thấy giải pháp đúng. Bất cứ ai có thể cho tôi biết web.config của tôi nên bao gồm tất cả các POSTS? Và/hoặc làm thế nào để thiết lập ánh xạ Handler đúng trong IIS, vì tôi mới phát triển web và tìm số tùy chọn một chút áp đảo.

Các mảnh javascript ném lỗi như sau:

$.post("/", { latitude: locLat, longitude: locLon, username: $('#onlineUsers').attr('itemid') }); 
+0

nếu bạn kiểm tra lỗi cháy hoặc công cụ chrome dev, url đúng là yêu cầu đang được thực hiện? – Rafay

+0

Yêu cầu nằm trong phương pháp Chỉ mục của Bộ điều khiển chính. Tôi đã thử POST với cả '/' và 'Home/Index' dưới dạng URL và cả hai đều cho cùng một lỗi, nhưng tôi tin rằng chúng đúng. – Matt

Trả lời

18

Một 405 được ném bởi IIS khi một động từ HTTP (. GET, PUT, POST, DELETE, HEAD, vv) được yêu cầu và không được hỗ trợ/không được phép bởi trình xử lý được chỉ định.

Bạn sẽ cần phải mở quản lý IIS -> Default Web Site -> Handler Mappings (Hoặc xử lý ánh xạ đặc trưng cho ứng dụng web của bạn)

enter image description here

Tại đây bạn sẽ cần phải chơi với ánh xạ xử lý là một trong số chúng không cho phép động từ "POST".

Vì bạn không đăng bài lên bất kỳ trang cụ thể nào (.aspx, .ashx, v.v.), sẽ khó xác định trình xử lý chính xác đang gây ra sự cố cho bạn.

Handlers quan tâm có thể là:

  • ExtensionlessUrlHandler-ISAPI-4.0_32bit/64bit
  • StaticFile

Khi bạn xác định được xử lý yêu cầu của bạn đang được chuyển đến, kích đúp chuột vào nó để mở cuộc đối thoại.

enter image description here

Từ đó bấm vào nút "Request Hạn chế", sau đó "Verbs"

Hãy chắc chắn rằng động từ thích hợp có mặt trong vùng văn bản.

enter image description here

Như tôi đã đề cập trước đây, tôi không chắc chắn mà xử lý là xử lý yêu cầu của bạn là bạn không gửi bài đến bất kỳ trang cụ thể (bạn có thể có URL viết lại ở nơi đó được định tuyến theo yêu cầu của bạn một cách thích hợp).


Nếu thất bại ở trên, bạn có thể cần phải kiểm tra xem WebDAV Publishing có được cài đặt và xóa nó hay không (khởi động lại bắt buộc).

WebDAV

+3

Trình xử lý tệp tĩnh là vấn đề. Cảm ơn sự giúp đỡ, câu trả lời tuyệt vời! – Matt

+0

nhưng sau khi triển khai tác phẩm này cho tôi nhưng asp: nút liên kết ngừng hoạt động. Bạn có biết tại sao vấn đề này xảy ra không? – rahularyansharma

+0

Nếu tôi chỉ sử dụng GET, POST jquery ajax hoạt động nhưng asp: nút liên kết ngừng hoạt động, và nếu tôi sử dụng tất cả như được hiển thị trong hình ảnh của bạn thì jquer.post ném 405 lỗi. – rahularyansharma

0

Có lẽ bạn nên thay đổi định dạng post'URl của bạn như thế này:

$.post('@Url.Content("~/Attach/UpdateAttach")' 
0

một số người dùng ở đây đã chia sẻ lưu trữ và không dành riêng cho máy chủ, vì vậy họ có thể không có khả năng để có được quyền truy cập vào bảng điều khiển IIS ..

đây là trường hợp của tôi và đây là những gì tôi tìm thấy ..

Tôi có ứng dụng web của mình trên th e thư mục gốc được tạo thông qua bảng điều khiển Godaddy .. và yêu cầu POST được xác nhận ..

thì tôi đã sử dụng FileZilla để tạo thư mục thử nghiệm cho jquery của mình .. (thông báo tôi đã sử dụng FileZilla, vì vậy ứng dụng web và do đó IIS của GoDaddy là không nhận thức được rằng tôi muốn thư mục này là một phần của ứng dụng chúng tôi)

sau đó bất cứ khi nào tôi thử nghiệm jQuery này vào thư mục kiểm tra này .. tôi nhận được rằng lỗi [405 Phương pháp không được phép] ..

giải pháp cực kỳ đơn giản:

Tôi đã chuyển trang thử nghiệm ra khỏi thư mục thử nghiệm đó ted bởi FileZilla và đặt nó bên trong một thư mục được tạo ra thông qua bảng điều khiển Godaddy (trong trường hợp này IIS sẽ biết rằng trang này là một phần của ứng dụng web của tôi :))

Hy vọng rằng sẽ giúp những người trên Shared hosting

Các vấn đề liên quan