2014-04-16 26 views
14

Điều này phải là một cái gì đó thực sự câm nhưng tôi không thể nghĩ phải làm gì khác.api web hiển thị lỗi 403.14 khi localhost: số cổng nằm trong địa chỉ trình duyệt trong iis express

Sử dụng Visual Studio 2013 - Cập nhật 1, tôi đã tạo một dự án api 2 web trống trong một giải pháp hiện có, thêm gói hỗ trợ gốc (cors) và tạo bộ điều khiển api web cơ bản.

Lớp WebApiConfig có vẻ là tốt:

public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 
     var cors = new EnableCorsAttribute("*","*","*"); 
     config.EnableCors(cors); 
     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 

Và cũng Global.asax

protected void Application_Start() 
    { 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
    } 

sau đó tôi chạy các ứng dụng, IIS khởi động nhanh thường và trình duyệt bắt đầu với url của ứng dụng nhưng không có gì có vẻ hiệu quả.

Nếu URL là "localhost: port number" tôi nhận được 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.

Nếu tôi thử "localhost: port number/api" tôi nhận được Lỗi HTTP 404.0 - Không tìm thấy Tài nguyên bạn đang tìm kiếm đã bị xóa, tên của nó đã thay đổi hoặc tạm thời không khả dụng.

Tôi đã xem một số blog, hướng dẫn, ví dụ và tôi chưa từng thấy bất kỳ nơi nào đặc biệt cần được thực hiện. Ai đó có thể vui lòng làm sáng tỏ một số thứ tôi có thể bị thiếu?

Trả lời

16

Web Api không có trang có thể xem mặc định (aspx, html, v.v.) có thể xem được bằng cách điều hướng đến thư mục gốc (localhost:port trong trường hợp này). Đó là hành vi bình thường. Để truy cập Api của bạn thông qua bộ điều khiển, bạn cần truy cập nó bằng mẫu tuyến được chỉ định trong phương thức MapHttpRoute() của bạn.

Vì vậy, để truy cập phương thức GET trong Api của bạn, bạn sẽ mở trình duyệt và đặt localhost:port/api/{controllername} vào url. {controllername} sẽ được đặt thành tên của lớp trình điều khiển của bạn mà không cần Bộ điều khiển thêm vào cuối.

ví dụ: Nếu điều khiển của bạn trông như thế này:

public class TestController : ApiController { 
    public HttpResponseMessage Get() { 
      return something; 
    } 

    public HttpResponseMessage Get(int id) { 
      return something with id; 
    } 
} 

Sau đó, url của bạn cho Get() đầu tiên sẽ trông như thế này:

localhost:port/api/test 

Và url cho phần thứ hai Get(int id) sẽ trông như thế này :

localhost:port/api/test/5 
+1

Tôi cũng đã cố gắng đó và tôi nhận được nhà thám hiểm "Trang web không thể hiển thị trang" và là nguyên nhân "Trang web này có một lỗi lập trình" –

+0

Can bạn đăng một số lớp điều khiển của bạn để chúng tôi có thể xem những gì các phương pháp của bạn trông như thế nào? – jensendp

+0

Hóa ra tôi đã cố gắng sử dụng tên tùy chỉnh cho các phương thức và sau đó nhận ra rằng api này chỉ thừa nhận các động từ http tiêu chuẩn trừ khi định nghĩa tuyến đường được thay đổi mà không phải là yêu cầu của tôi. Cảm ơn bạn đã dành thời gian trả lời câu trả lời của bạn đã làm cho tôi nhận ra điều này. –

1

Nếu cấu hình tuyến đường của bạn là OK chắc chắn, bạn có thể thử thêm này trong Web.config:

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 
Các vấn đề liên quan