3

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

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

  [HttpGet]
  public User Get(Guid? Id)

更新路由配置

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

完整的 Http Get 签名,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));
        }
    }
}
4

2 回答 2

3

尝试使用:

[HttpGet]
public User Get(Guid? Id = null)
于 2012-10-10T20:50:47.633 回答
1

我能够将 null 传递给 Guid?当我使用

  • 查询字符串参数:api/values?id=null
  • 路由参数:api/values/null

控制器:

 public class ValuesController : ApiController
 {
     public User Get(Guid? Id)
     { ... }
 }
于 2012-10-10T21:15:15.537 回答