0

私は、web api を開発しようとしている asp.net mvc で最初のステップを実行しています。

次のルーティング機能があります。

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

    routes.MapRoute(
        name: "cdApiDefault",
        url: "api/{controller}/{action}/{token}/{mid}/{id}",
        defaults: new {
            token = UrlParameter.Optional,
            mid = UrlParameter.Optional,
            id =  RouteParameter.Optional }
    );
}

および次のコントローラー:

namespace cdapi.Controllers
{
    public class PostsController : ApiController
    {
        // GET api/posts
        public IEnumerable<string> Get()
        {
            return new string[] { "GET_value1", "GET_value2" };
        }

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

        // POST api/posts
        public void Post([FromBody]string value)
        {
        }

        // PUT api/posts/5
        public void Put(int id, [FromBody]string value)
        {
        }

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

        public String GetTest(String token, String mid)
        {
            return token + " - " + mid;
        }
    }
}

次の呼び出し

hxxp://localhost:52628/api/posts/5

(私のブラウザでは)何らかの結果が得られます。つまり、関数 GET が呼び出され、値が返されます。

しかし、試してみると

hxxp://localhost:52628/api/posts/GetTest/MyTestToken/myTestMid

「リソースが見つかりません」というエラー メッセージが表示されます。

{Action}には呼び出す関数を含める必要があり、'token''mid'には指定した値を含める必要があると考えました。私は何を間違っていますか?

4

1 に答える 1

0

ApiController は、通常の MVC コントローラーとは異なる動作をします。ここで、メソッド名 (GET、POST、PUT、DELETE) は URL フラグメントではなく、HTTP 動詞を表します。最初の電話で、

/api/posts/5

これは を呼び出しますGet(int)

System.Web.Mvc.Controller必要に応じてルーティングを行うには、代わりにから継承して標準の MVC に切り替えSystem.Web.Http.ApiController、メソッドを変更して返すようにします。ActionResult

于 2012-11-07T15:50:49.853 に答える