Asp.net mvc 如何在ASP.NET MVC 3.0中创建RESTFul控制器操作?

Asp.net mvc 如何在ASP.NET MVC 3.0中创建RESTFul控制器操作?,asp.net-mvc,rest,asp.net-mvc-routing,Asp.net Mvc,Rest,Asp.net Mvc Routing,我已在my Home Controller中创建了一个接受文本的操作: public class HomeController : Controller { public string DisplayText(string text) { return text; } } 我可以通过将文本参数作为查询字符串传递,使用以下url调用此操作: http://localhost:4574/Home/Display

我已在my Home Controller中创建了一个接受文本的操作:

 public class HomeController : Controller
    {
       public string DisplayText(string text)
        {
            return text;
        }
    }
我可以通过将文本参数作为查询字符串传递,使用以下url调用此操作:

http://localhost:4574/Home/DisplayText?text=some text
但是,我希望能够使用以下样式将其命名为:

http://localhost:4574/Home/DisplayText/some text
因此,无需指定参数名称(“文本”)

这怎么可能呢?

另一个更清楚地解释它的例子如下

public string Add(string a, string b)
        {
            return (int.Parse(a) + int.Parse(b)).ToString();
        }
我可以用以下方式来称呼它:

http://localhost:4574/Home/Add?a=2&b=3

但是如何以一种平静的方式来称呼它呢?e、 g.(
http://localhost:4574/Home/Add/2/3

您可以定义路线:

routes.MapRoute(
    "MyRoute",
    "{controller}/{action}/{a}/{b}",
    new { controller = "Home", action = "Add" },
    // it's always a good idea to define route constraints
    // in this case we are constraining the a and b parameters to numbers only
    new { a = @"\d+", b = @"\d+" } 
);
然后:

public ActionResult Add(int a, int b)
{
    return Content(string.Format("The result of {0}+{1}={2}", a, b, a + b));
}

您可以定义一个路由:

routes.MapRoute(
    "MyRoute",
    "{controller}/{action}/{a}/{b}",
    new { controller = "Home", action = "Add" },
    // it's always a good idea to define route constraints
    // in this case we are constraining the a and b parameters to numbers only
    new { a = @"\d+", b = @"\d+" } 
);
然后:

public ActionResult Add(int a, int b)
{
    return Content(string.Format("The result of {0}+{1}={2}", a, b, a + b));
}

你赢了我:)。然而,他应该考虑什么时候它应该是URL的一部分,或者当它应该是一个参数。@ TomasJansson,是的,这是一个重要的设计选择。@ TomasJansson,鼓励了几个答案。您可以包含查询与资源提示。:)@bzlm,那更像是一张纸条。除此之外,我的答案完全相同,所以我删除了它。sidnote现在位于答案上,得票最多,更容易找到。谢谢。两个问题1)为什么您宁愿返回ActionResult而不是字符串?2) 放置路由约束将约束应用程序中的所有路由,因此这似乎不是一个好主意,因为某些操作可能具有不同的数据类型,例如字符串等,对吗?那你怎么能不受约束地写呢?你比我快:)。然而,他应该考虑什么时候它应该是URL的一部分,或者当它应该是一个参数。@ TomasJansson,是的,这是一个重要的设计选择。@ TomasJansson,鼓励了几个答案。您可以包含查询与资源提示。:)@bzlm,那更像是一张纸条。除此之外,我的答案完全相同,所以我删除了它。sidnote现在位于答案上,得票最多,更容易找到。谢谢。两个问题1)为什么您宁愿返回ActionResult而不是字符串?2) 放置路由约束将约束应用程序中的所有路由,因此这似乎不是一个好主意,因为某些操作可能具有不同的数据类型,例如字符串等,对吗?那么,你如何在没有约束的情况下编写它呢?