1

APIコントローラをMVC5アプリケーションに追加しようとしています。しかし、私はエラーが発生している "RouteDataは、 '空の文字列の値で'アクション 'という名前の項目が含まれている必要があります。 http://localhost/DataAPI/Community/Get/WebAPIルートにはRouteDataに 'action'が含まれている必要がありますか?

アプリケーションがAPIコントローラを認識したくないようです - 私がルートのデフォルトにアクションを追加すると、404エラーが発生します。私はそれを標準のコントローラに置き換えて(ルートデータにデフォルトのアクションを追加して)データを取得することができます。何か不足していますか?

コントローラは、コントローラ/ DataAPIサブディレクトリに住んでいる:

using System.Web.Http; 
using System.Net.Http; 

namespace ERP.Controllers.DataAPI 
{ 
    public class CommunityController : ApiController 
    { 
    PCSEntities db = new PCSEntities(); 

    public IEnumerable<Community> Get(Guid ApiKey) 
    { 
     return db.Communities.AsNoTracking().Take(10); 
    } 
    } 
} 

これは私のルートの設定です:

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

     #region DataAPI 

     var ns = new[] { "ERP.Controllers.DataAPI" }; 
     routes.MapRoute(
      name: "DataAPI", 
      url: "DataAPI/{controller}/{ApiKey}/{id}", 
      defaults: new { ApiKey = Guid.Empty, id = UrlParameter.Optional }, 
      namespaces: ns 
     ); 
     #endregion 

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

設定が少しずれています。あなたは、Web APIではなくプレーンなMVCのルート設定を表示しています。 – Nkosi

+0

あなたは正しいです!私はそれがこのような小さなものだと思った。多くのありがとう:) –

答えて

0

Routing in ASP.NET Web API

using System.Web.Http; 
using System.Net.Http; 

namespace ERP.Controllers.DataAPI 
{ 
    public class CommunityController : ApiController 
    { 
    PCSEntities db = new PCSEntities(); 

    public IEnumerable<Community> GetCommunities(Guid ApiKey) 
    { 
     return db.Communities.AsNoTracking().Take(10); 
    } 
    } 
} 

はあなたがいないMVCのルート設定を表示している以下のチュートリアルを見てください:

は、だからあなたの場合には次のようなパラメータとしてGUIDを渡すことができますウェブApi

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

     // Convention-based routing. 

     #region DataAPI 

     var ns = new[] { "ERP.Controllers.DataAPI" }; 
     config.Routes.MapHttpRoute(
      name: "DataAPI", 
      routeTemplate: "DataAPI/Community/{ApiKey}", 
      defaults: new {controller= "Commmunity", action = "GetCommunities", ApiKey = Guid.Empty}, 
      namespaces: ns 
     ); 
     #endregion 

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

残念なことに、WebAPIルーティングは名前空間をサポートしていません。まあ、おそらくそれは(DataTokensを介して)ですが、MVC5.2.3 DataTokens = nullであり、ReadOnlyなので初期化することはできません。ですから、私はジェネリックコントローラネームスペースを取り除き、リクエストをCommunityApiControllerにルーティングするためのAPIコントローラごとにカスタムルートを作成しています –

0

以下のようRouteConfigであなたのルートを交換してみてください。

routes.MapHttpRoute(
    name: "DataAPI", 
    routeTemplate: "DataAPI/{controller}/{ApiKey}/{id}", 
    defaults: new { ApiKey = Guid.Empty, id = UrlParameter.Optional } 
); 

また、Web APIでは、明示的にと呼ぶべきではありません方法。 http://localhost/DataAPI/Community/6c4058a6-7edb-46c0-9d81-1c508c729f5b

関連する問題