在ODATA的WebAPI文档中有a page about Attribute Routing。
在此页面中,有一个关于当对特定控制器的所有请求具有相同前缀时使用ODataRoutePrefixAttribute的示例,并且此前缀可以包含参数。在示例中,所有操作方法都声明了相同的参数。从他们的样本:
[ODataRoutePrefix("Customers({id})")]
public class MyController : ODataController
{
[ODataRoute("Address")]
public IHttpActionResult GetAddress(int id)
{
......
}
[ODataRoute("Address/City")]
public IHttpActionResult GetCity(int id)
{
......
}
[ODataRoute("/Order")]
public IHttpActionResult GetOrder(int id)
{
......
}
}
我想避免在每个方法中重复参数,只是让它成为类的属性,如下所示:
[ODataRoutePrefix("Customers({id})")]
public class MyController : ODataController
{
public int Id
{
get { ... }
}
[ODataRoute("Address")]
public IHttpActionResult GetAddress()
{
......
}
}
如果不将id
参数作为参数传递给action方法,从URL中获取RequestContext.RouteData.Values
参数的值?
答案 0 :(得分:0)
我发现我可以通过读取public string Id => (string)this.RequestContext.RouteData.Values["id"];
中的值来实现属性getter:
<xs:complexType name="ConfigurationType">
此解决方案的一个缺点是路由数据值在控制器的Initialize方法中似乎不可用,因此需要谨慎,不要依赖于此处的此类属性。