Asp.net mvc 如何在ASP.NET MVC 3.0中创建RESTFul控制器操作?
我已在my Home Controller中创建了一个接受文本的操作: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
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) 放置路由约束将约束应用程序中的所有路由,因此这似乎不是一个好主意,因为某些操作可能具有不同的数据类型,例如字符串等,对吗?那么,你如何在没有约束的情况下编写它呢?