6

まず、このトピックに関する記事をできるだけ多く読み、いくつかの「ルート デバッグ」プラグインをインストールしました。私はJava/Springに精通しているので、vs 2012を使用してこのことをデバッグする方法が本当にわかりません. .)

public class RouteConfig
{
  public static void RegisterRoutes(RouteCollection routes)
  {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Legal", 
          action = "Index", 
          id = UrlParameter.Optional }
    );
  }
}

これで、デフォルトのコントローラーを介して Index ページにアクセスできるようになりました。ただし、次のコントローラーに基づいて URL /WebApi/Metadata/ にアクセスしようとしています。

[BreezeController]
public class WebApiController : ApiController {
  private readonly EFContextProvider<BankruptcyDbContext> _contextProvider =
    new EFContextProvider<BankruptcyDbContext>();

  [HttpGet]
  public string Metadata() {
    return _contextProvider.Metadata();
  }
}

「Route Debugger」によると、/WebApi/Metadata、/WebApi/Metadata/、/WebApi/Metadata/0 などのリクエストは「一致」する必要がありますが、取得できるのは 404 だけです。

Edit1: ようやくトレース ログを見つけて、もう少し詳しく調べました。

The controller for path &amp;#39;/WebApi/Metadata&amp;#39; was not found or does not implement IController
4

2 に答える 2

1

MapHttpRouteApiController ベースのルートの拡張機能を使用してルートを登録する必要があります。例:

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

ところで、BreezeController とは何ですか? WebApiController で装飾されているのはなぜですか?

于 2013-05-31T03:21:51.373 に答える