11

asp.net mvc 4アプリを作成し、デフォルトのwebapiコントローラーを追加しました

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

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

    // POST api/default1
    public void Post(string value)
    {
    }

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

    // DELETE api/default1/5
    public void Delete(int id)
    {
    }
}

次に、ブラウザに入力してメソッド get() を呼び出そうとしhttp://localhost:51416/api/getましたが、エラーが発生しました:

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

私のルート設定:

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

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

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

デフォルトで機能しないのはなぜですか?それを修正するために私は何ができますか?

4

1 に答える 1

8

getGET は HTTP 動詞のタイプであるため、URL を入力する必要はありません。

デフォルトでは、URL を入力すると、ブラウザは GET リクエストを送信します。

だからそれを試してみてくださいhttp://localhost:51416/api/

ルーティングUserApiController構成で行のコメントを外すと、デフォルトの API コントローラーになるためです。defaults: new { controller = "UserApiController"...

ルートを指定するときに「コントローラー」サフィックスは必要ないので、正しいdafaults設定は次のとおりですdefaults: new { controller = "UserApi", id = RouteParameter.Optional } :)

または、コントローラーを明示的に指定する必要がありますhttp://localhost:51416/api/userapi

ASP.NET Web API サイトで、Wep.API と HTTP 動詞ベースのルーティング規則について学び始めることができます。

于 2012-08-22T11:54:05.593 に答える