34

.net フレームワーク 4.5 を使用して、mvc4 と共に Visual Studio 2012 をインストールしました。今、属性の書き込みで webapi2 を使用したいのですが、hlep ページにすべてのエンドポイントを適切に表示したいと考えています。

私のソリューションでは、新しいmvc4ベースのemtpyプロジェクトを追加し、nugetを使用してmvc5にアップグレードしてから、webapi2パッケージをインストールしました。最後に、webapi2 のヘルプ パッケージをインストールしました。

現在、routeprefix を使用すると、ヘルプ ページにコンテンツが表示されず、ブラウザで webapi エンドポイントにアクセスしようとすると、次のエラーがスローされます。

http://expressiis.com/api/v1/

   <Error>
    <Message>
    No HTTP resource was found that matches the request URI 'http://expressiis.com/api/v1/'.
    </Message>
    <MessageDetail>
    No type was found that matches the controller named 'v1'.
    </MessageDetail>
    </Error>

namespace WebApi.Controllers
{
    [RoutePrefix("api/v1")]
    public class SubscribersController : ApiController
    {
        // GET api/<controller>   
        [Route("")]
        [HttpGet]
        public IQueryable<string> Get()
        {
            return new string[] { "value1", "value2" }.AsQueryable();
        }


    }
}
4

9 に答える 9

35

私が遭遇した問題は、Application_Start() での順序付けに関連していました。以下の Web API 構成の順序に注意してください。

これは動作しません

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

これは機能します

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}
于 2014-04-09T17:52:39.513 に答える
13

これはあなたのケースではありませんでしたが (サンプル コードから明らかなように)、Controller クラス名をController.

そうしないと、 によって取得されませんconfig.MapHttpAttributeRoutes();

于 2016-06-30T18:02:19.393 に答える
5

この質問には既に回答が選択されています。しかし、私には別の解決策があり、選択した回答が役に立たない場合は返信すると役立つと思います.

私にとってはばかげた間違いでした。コントローラーは 2 つありましたが、1 つしか機能していませんでした。解決策は、コントローラー クラスの名前が不適切だったことです。

私の作業コントローラー-

public class FooController : ApiController { }

私の動かないコントローラー-

public class BarControllers : ApiController { }

コントローラー クラスが で終わっていることを確認してくださいController。末尾sが私を手に入れました!

于 2017-02-18T19:14:43.667 に答える
-5

私の場合、次の行が問題を引き起こしていました。コメントするだけで、すべてが機能し始めます

config.MapHttpAttributeRoutes();

WebApiConfig.cs ファイルでコメントします

于 2015-08-15T23:10:54.697 に答える