可以使用可以为空的Guid的Web Api GET方法?

时间:2012-10-10 20:29:18

标签: asp.net-mvc asp.net-web-api

我有一个MVC Web API get方法,我希望能够将可以为空的Guid作为参数传递。如果我用“?Id = null”设置GET,我得到400响应。我可以通过一个空的指导,但我宁愿不这样做。

无论我将URI更改为“id =,id = null etc”,它都不会接受null。有谁知道如何使这项工作?

  [HttpGet]
  public User Get(Guid? Id)

更新路线配置

  config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

Full Http获取签名,sourceId是id喜欢传递为null的参数。

 [HttpGet]
  public IEnumerable<ActionItemsListViewModel> GetPagedList(int skip, int take, int page, int pageSize, [FromUri]List<GridSortInfo> sort, [FromUri] ActionItem.ActionItemStatusTypes? actionItemStatus, Guid? sourceId)

发现问题,这个过滤器说ModelState无效。

public class ApiValidationActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        if (!actionContext.ModelState.IsValid )
        {
            var errors = actionContext.ModelState
                .Where(e => e.Value.Errors.Count > 0)
                .Select(e => e.Value.Errors.First().ErrorMessage).ToList();

            actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, string.Join(" ", errors));
        }
    }
}

1 个答案:

答案 0 :(得分:3)

尝试使用:

[HttpGet]
public User Get(Guid? Id = null)