0

我正在使用 .net Web API 开发一个 Restful 服务。

有几篇关于使用模型验证对发布请求进行输入验证的帖子。但是,我想知道对 Get 请求进行验证的最佳做法是什么。

例如

public HttpResponseMessage Get(int id, string type)
{
    // validation
    if (id <= 500 & id >= 0) {
        // invalid request
        throw new HttpResponseException();
    }
    // type validation
    if (type is not in a predefined allowed type list from database) {
        // throw validation error
    }
    // more validation ... ...
    // do something else
}

我想知道将验证逻辑放入 .net web api 框架的最佳位置是什么。

id 验证只是一个示例,在某些情况下验证逻辑可能会变得相当复杂。

我不想只为 id 创建一个类并将一些自定义验证器属性放在 ID 属性上。我认为 .net 已经对此有了更好的支持。

4

1 回答 1

1

您可以为此参数使用路由约束

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },                
            constraints: new { id = "@[1-500]+" } //this is not valid code. use correct regular expression to implement validation behavior you need.
        );

评论回复。你的意思是 - 复杂的验证?您询问了 GET 请求,最简单的方法是使用路由约束。另一种方法是 ActiontFilter。例如

public class SomeFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext filterContext)
    {
        string param = filterContext.ActionArguments["id"].ToString();
        //do some validation stuff here. for example data anotations
        var validator = new RangeAttribute(1, 500); //numeric range.
        if (validator.IsValid(Convert.ToInt64(param)));
            do valid//
        //if u need validate entire model from post request try 
        if (!filterContext.ModelState.IsValid)
        {
            filterContext.Response = filterContext.Request.CreateErrorResponse(
                HttpStatusCode.BadRequest, filterContext.ModelState);
        }

    }
}

或谷歌“web api 模型验证”

于 2013-06-10T13:15:47.143 回答