AttributeRouting必需参数

时间:2013-08-01 15:11:39

标签: asp.net attributerouting

我可以在所有控制器中添加强制参数吗? 我开发了RESTful api,所以我想为每条路径都要求特殊的“apikey”参数。

        [HttpPut]
    [PUT("create")]
    public PostDto Create(string title, string description, string tag, long photo, float lat, float lon, int error)
    {
        if (description.Length > DescriptionMaxLength)
            throw new ApiException(ErrorList.TooLongDescription, string.Format("Description is more than {0}", DescriptionMaxLength));

        throw new NotImplementedException();
    }

    [HttpPost]
    [POST("edit/{id:int}")]
    public bool Edit(int id, string title, string description, int? photo)
    {
        if (description.Length > DescriptionMaxLength)
            throw new ApiException(ErrorList.TooLongDescription, string.Format("Description is more than {0}", DescriptionMaxLength));

        throw new NotImplementedException();
    }

    [HttpDelete]
    [DELETE("delete/{id:int}")]
    public bool Delete(int id)
    {
        if (id < 0)
            throw new ApiException(ErrorList.InvalidValue, "id is smaller than 0");

        throw new NotImplementedException();
    }

但我不想为每种方法手动完成。

1 个答案:

答案 0 :(得分:1)

首先,您需要确定在操作主体内检索API密钥的确切方式。 由于您不希望将其作为方法的参数传递,它可以是控制器的属性(不是最好的方法,您必须创建自定义基本控制器类,但它可能适用于简单的方案)或另一个临时的每个请求存储。

然后,您需要创建一个Web API操作过滤器。它类似于常规的ASP.NET MVC动作过滤器,网上有很多教程,但大多数都是关于授权的。

此过滤器会尝试将请求中的API密钥注入控制器或您选择的临时存储中 - 在过滤器的OnActionExecuting method内,您可以访问请求信息和控制器上下文。

完成所有操作后,只需在Web API配置中注册您的过滤器,这里有example如何执行此操作。