20

SlashBaseService という名前のベース ApiController を持つ webapi プロジェクトがあります。

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

結果の dll は WebForms プロジェクトで使用されるため、ルートを生成する次のコードを含む WebActivator クラスもあります。

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 });

別のアセンブリにテストサービスもあります。

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

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

すべての非常に単純なもの。問題は、これが生成する URL の 1 つにアクセスしようとすると、次のメッセージが表示されることです。

「SampleSlashBaseService」という名前のコントローラーに一致する型が見つかりませんでした。

/routes.axd からのルート リストも正しいようです。

4

5 に答える 5

54

問題が見つかりました。

ApiControllersクラス名には「Controller」という接尾辞を付ける必要がありますが、私のものはそうではありませんでした。それを変更してSampleSlashBaseController問題を解決しました。

注:私が行ったように「サービス」をサフィックスにすることは可能ですが、IHttpControllerSelectorここで説明されているようなカスタムを実装する必要があります:http://netmvc.blogspot.no/2012/06/aspnet-mvc-4-webapi- support-areas-in.html

于 2012-07-09T14:02:21.670 に答える
6

私の場合、コントローラーは適切に定義されていましたが、パブリックとマークされていませんでした。

于 2015-12-19T18:45:51.643 に答える
2

それだけの価値があるので、私はこれに遭遇しました。私の問題は、手動で追加したクラスが ApiController から継承されていないことでした。public class QueueController : ApiControllerクラス定義はnotである必要がありpublic class QueueControllerます。見逃すなんてばかげたこと。

于 2017-04-25T15:16:04.350 に答える