使用ODataRoutePrefixAttribute编写C#ODATA控制器时如何将参数绑定到类的属性而不是方法中的参数?

时间:2016-12-16 10:27:31

标签: c# asp.net-web-api asp.net-web-api-odata

在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参数的值?

1 个答案:

答案 0 :(得分:0)

我发现我可以通过读取public string Id => (string)this.RequestContext.RouteData.Values["id"]; 中的值来实现属性getter:

<xs:complexType name="ConfigurationType">

此解决方案的一个缺点是路由数据值在控制器的Initialize方法中似乎不可用,因此需要谨慎,不要依赖于此处的此类属性。