2017-03-20 13 views
2

これは単純なものです。私は過去にこれをしてきました。しかし、私は何かが欠けているようです。WebApiルーティングは404(Not Found)応答を引き起こします

WebApiConfig.cs

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

Global.asax.cs

protected void Application_Start(object sender, EventArgs e) 
{ 
    GlobalConfiguration.Configure(WebApiConfig.Register); 
    AreaRegistration.RegisterAllAreas(); 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
} 

SomeController.cs

[RoutePrefix("api")] 
public class SomeController: ApiController 
{ 
    [Route("some")] 
    [HttpGet] 
    private HttpResponseMessage GetSome(HttpRequestMessage request) 
    { 
     ... 
    } 
} 

私が呼ぶとき今、:

:​​、私は次のよう 404を取得

{「メッセージ」:「いいえHTTPリソースが一致する見つかりませんでした要求 URI 『http://localhost:54699/api/some』。」、「MessageDetail」:「いいえ タイプが 『いくつかの』という名前のコントローラと一致する見つかりませんでした」 }

フォルダ構造:

enter image description here

答えて

3

でなければなりませんし、なぜあなたのコントローラのメソッドは、これはGetSomeがプライベート、パブリック

[RoutePrefix("api")] 
public class SomeController: ApiController 
{ 
    [Route("some")] 
    [HttpGet] 
    public HttpResponseMessage GetSome(HttpRequestMessage request) 
    { 
    ... 
    } 
} 
+0

良いキャッチ、私は気づいていませんでした – DrinkBird

+0

'MessageDetail'とはあなたの例でそれを含めていないのは、' GetSomeController'からどのモデルがバインドされているかということです。最後のバージョン以降に変更されたデータを取得するための属性を追加します。必要なgetメソッドの本体からのものである場合は –

+0

ありがとうございます。それはそれだった。時には、愚かなことに気づくために余分な目のペアが必要になることもあります。 –

0

は、MVCのFilterConfigGlobalConfiguration.Configure(WebApiConfig.Register);を動かすようにしてください。これは、WebAPI属性ルーティングを持つ標準の警告です。

+0

男性を働かせませんでした。しかし、それは良い試行でした –

+0

私は実際のシーケンスを覚えていませんが、私は99%がWebApiが設定されている順序と関係していると確信しています。 – DrinkBird

+1

はい。あなたが正しいです。私は古いプロジェクトからこれを覚えています。しかし、今回は何らかの理由でそこに入った私的修飾子でした。 –

0

ルーティング設定ファイルに/ apiがあります。

コントローラのルートプレフィックスとして/ apiを指定してから、アクションが「some」になっています。

URIが "一部" は

http://localhost:<port>/api/api/some 
+0

いいえ。まだ見つからない –

0
[RoutePrefix("api/some")] 
public class SomeController: ApiController 
{ 
    [HttpGet] 
    public HttpResponseMessage GetSome(HttpRequestMessage request) 
    { 
    ... 
    } 
} 

あなたの方法でなければなりませんプライベートです。また、各メソッドのルート属性を書き換えないように、コードスニペットのようにRoutePrefix属性を変更します。

+0

おっと、すでに回答しているのを見ていませんでした。 –

関連する問題