1

ASP.NET Web API (MVC 4 から) をプロジェクトに追加しようとしています.....しかし、Area/WebAPI/Controller から応答を取得するのに問題があります (どこが間違っているのかよくわかりません) ...)

Route Debugger をインストールし、メイン ページに移動すると... ルートが表示されます...

Matches Current Request Url Defaults    Constraints DataTokens


    False   api/{controller}/{action}/{id}  action = Index, id = UrlParameter.Optional  (empty) Namespaces = OutpostBusinessWeb.Areas.api.*, area = api, UseNamespaceFallback = False
    False   {resource}.axd/{*pathInfo}  (null)  (empty) (null)
    True    {controller}/{action}/{id}  controller = Home, action = Index, id = UrlParameter.Optional   (empty) (empty)
    True    {*catchall} (null)  (null)  (null)

ルートが設定されているようです

次に、「api」エリアに PlansController があります。これは、「新規追加」によって生成されたデフォルトの apiController です...

public class PlansController : ApiController
{
    // GET /api/<controller>
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET /api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }

    // POST /api/<controller>
    public void Post(string value)
    {
    }

    // PUT /api/<controller>/5
    public void Put(int id, string value)
    {
    }

    // DELETE /api/<controller>/5
    public void Delete(int id)
    {
    }
}

今私が行くときhttp://localhost:2307/api/Plans/1

私は得る

Server Error in '/' Application.
The resource cannot be found.    
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 
    Requested URL: /api/Plans/1

理由はありますか?設定する必要があるものはありますか?

4

2 に答える 2

3

ASP.NET MVC 4 は、既定の領域では WebApi をサポートしていません。

Martin Devillers が解決策を提案しました: ASP.NET MVC 4 RC: Getting WebApi and Areas to play pretty

同様の質問に対する私の回答で詳細を確認することもできます (特にポータブル領域のサポートについて): ASP.Net WebAPI 領域のサポート

于 2012-07-17T17:51:27.037 に答える
2

次のように変更します。

    // GET /api/<controller>
    public IEnumerable<string> GetMultiple(int id)
    {
        return new string[] { "value1", "value2" };
    }

次のように呼び出します。

http://localhost:2307/api/Plans/GetMultiple/1

これは私の Global.asax です:

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

私のコントローラー:

   public class MyApiController : ApiController
   {
      public IQueryable<MyEntityDto> Lookup(string id) {

        ..
   }

私はそれを次のように呼びました:

    http://localhost/MyWebsite/api/MyApi/Lookup/hello

完璧に動作します。

于 2012-04-23T23:48:25.653 に答える