2012-07-08 17 views
18

tôi có một dự án WebAPI với một ApiController cơ sở tên SlashBaseService:Bắt "Không loại đã được tìm thấy phù hợp với bộ điều khiển có tên là 'SampleSlashBaseService" khi cố gắng sử dụng WebAPI

[RouteArea("uBase")] 
public abstract class SlashBaseService : ApiController 
{ 
} 

Các dll kết quả được sử dụng trong một WebForms dự án vì vậy tôi cũng có một lớp WebActivator với đoạn mã sau để tạo ra các tuyến đường:

RouteTable.Routes.MapHttpAttributeRoutes(config => 
{ 
    // Get all services inheriting from SlashBaseService 
    foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) 
    { 
     foreach (var type in assembly.GetTypes()) 
     { 
      if (type.IsSubclassOf(typeof(SlashBaseService))) 
      { 
       // Scan assembly 
       config.ScanAssembly(assembly); 

       // Skip the remaining types in this assembly 
       break; 
      } 
     } 
    } 
}); 

RouteTable.Routes.MapHttpRoute(
    name: "DefaultBase", 
    routeTemplate: "base/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional }); 

tôi cũng có một testservice trong một hội đồng riêng biệt:

public class SampleSlashBaseService : SlashBaseService 
{ 
    [GET("TestOpenMethod")] 
    public string GetTestOpenMethod() 
    { 
     return "Hello anonymous!"; 
    } 

    [GET("Echo/{message}")] 
    public string GetEcho(string message) 
    { 
     return message; 
    } 
} 

Tất cả những thứ khá đơn giản. Vấn đề là khi tôi cố gắng đi đến một trong các url này tạo ra tôi nhận được thông báo sau:

Không tìm thấy loại nào khớp với bộ điều khiển có tên 'SampleSlashBaseService'.

Danh sách tuyến đường từ /routes.axd cũng có vẻ chính xác.

Trả lời

53

Đã tìm thấy sự cố.

ApiControllers tên lớp cần được thêm vào "Bộ điều khiển" và tên của tôi không phải là. Thay đổi nó thành SampleSlashBaseController giải quyết được sự cố.

LƯU Ý: Có thể hậu tố nó với "Dịch vụ" như tôi đã làm, nhưng sau đó bạn phải thực hiện một tùy chỉnh IHttpControllerSelector như mô tả ở đây: http://netmvc.blogspot.no/2012/06/aspnet-mvc-4-webapi-support-areas-in.html

+7

Tôi đã làm điều gì đó dọc theo các đường đối diện. Tôi đã có bộ điều khiển nơi nó không được cho là! 'defaults: new {controller =" APIController "}' nên là 'mặc định: new {controller =" API "}' Bạn phải OMIT 'Controller' trong' WebApiConfig.cs' của bạn! – Skovy

+0

Đó là những gì đã xảy ra với tôi khi tôi rời hậu tố điều khiển trên WebApiConfig.cs. Nhận xét của bạn đã giúp tôi :) –

+1

Tôi đã kéo tóc ra trước khi tôi tìm thấy điều này. Thật là một lỗi ngớ ngẩn. CẢM ƠN BẠN –

2

Trong trường hợp của tôi, có hai bộ điều khiển với cùng tên, trong các thư mục khác nhau. Đổi tên họ giải quyết vấn đề ngay lập tức.

9

Bạn cũng cần chắc chắn rằng lớp Controller là Công

+1

Lớp học của anh ấy đã được công khai .... – DavidG

+1

câu hỏi này đã được trả lời tuy nhiên nhận xét của tôi là câu trả lời cho vấn đề tôi gặp phải. Tôi đã có lỗi tương tự tuy nhiên tôi đã mất tích công cộng. Tôi muốn để điều này ở đây trong trường hợp nó sẽ giúp người khác. – Eranga

+2

Giúp tôi, vì vậy cảm ơn câu trả lời của bạn – paiden

6

Trong trường hợp của tôi điều khiển được xác định đúng, nhưng đã không được đánh dấu nào.

1

Đối với những gì nó có giá trị, tôi chạy vào vấn đề này và vấn đề của tôi là lớp được thêm theo cách thủ công của tôi không được kế thừa từ ApiController. Định nghĩa lớp cần phải là public class QueueController : ApiController không phải là public class QueueController. Thật là một điều ngu ngốc để bỏ qua.

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