1

私は2つのコントローラー(およびApiControllerとコントローラー)を持っています。ApiController はプロバイダーを呼び出してデータベースからデータを取得し、Controller はビューを返します。それらのルート構成を個別に作成しました。ただし、どのルートを使用するかを特定するのに問題があるようです。よくわからない

RouteConfig.cs

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


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

WebApiConfig.cs

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.EnableSystemDiagnosticsTracing();
    }
}

Global.asax.cs

public class WebApiApplication
{
    protected void ApplicationStart()
    {   
        WebApiAuthConfig.Register(GlobalConfiguration.Configuration);
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        AutoMapperConfig.RegisterMappings();

        GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
    }
}

プロジェクト内でアクセスすると、ルートは正常に機能します。しかし、HttpClient が上記のルート (Api/../..) を使用して ApiController に接続しようとすると、コントローラーに接続できませんでした。どうやらルートが混同されているようです。

4

3 に答える 3

1

コードの WebApi 部分で標準 Web ルーティングを設定する代わりに、コードの標準 Web ルーティング部分で WebApi ルーティングを設定することを検討してください。これは、私がアクセスできるプロジェクトで機能します。

public class MvcApplication : HttpApplication {
   protected void Application_Start() {
      GlobalConfiguration.Configure(WebApiConfig.Register);
      RouteConfig.RegisterRoutes(RouteTable.Routes);
      ...
   }
}

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 = "Home", action = "Index", id = UrlParameter.Optional}
      );
   }
}

public static class WebApiConfig {
   public static void Register(HttpConfiguration config) {
      config.MapHttpAttributeRoutes();

      config.Routes.MapHttpRoute(
         name: "DefaultApi",
         routeTemplate: "api/{controller}/{id}",
         defaults: new {id = RouteParameter.Optional}
      );
   }
}
于 2016-03-10T00:15:48.673 に答える
-1

WebApiConfig.cs では、routeTemplate はapi/{controller}/{action}/{id}

于 2014-04-02T11:54:10.020 に答える