无法弄清楚asp.net mvc中的路由

时间:2012-11-07 13:05:54

标签: asp.net-mvc asp.net-mvc-routing

我正在尝试开发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://本地主机:52628 / API /帖/ 5

(在我的浏览器中)产生一些结果,即调用函数GET并返回一个值。

然而,当我尝试

  

hxxp://本地主机:52628 / API /帖/ GetTest / MyTestToken / myTestMid

返回'无法找到资源'错误消息。

我认为 {Action} 应该包含要调用的函数,而'令牌''mid'应该包含我指定的值。我做错了什么?

1 个答案:

答案 0 :(得分:0)

ApiControllers与常规MVC控制器的工作方式不同。这里,方法名称(GET,POST,PUT,DELETE)表示HTTP VERBS,而不是url片段。在第一次通话中,

/api/posts/5

这会调用Get(int)

要按照您的意愿进行路由,请通过继承System.Web.Mvc.Controller而不是System.Web.Http.ApiController切换到标准MVC并修改您的方法以返回ActionResult